#include <iostream>
#include <string>
#include <cmath>

using namespace std;


char data[24][6] = {{0, 1, 2, 3, 4, 5}, {0, 3, 1, 4, 2, 5}, {0, 4, 3, 2, 1, 5}, {0, 2, 4, 1, 3, 5},
		    {1, 5, 2, 3, 0, 4}, {1, 3, 5, 0, 2, 4}, {1, 0, 3, 2, 5, 4}, {1, 2, 0, 5, 3, 4},
		    {2, 5, 4, 1, 0, 3}, {2, 1, 5, 0, 4, 3}, {2, 0, 1, 4, 5, 3}, {2, 4, 0, 5, 1, 3},
		    {3, 5, 1, 4, 0, 2}, {3, 4, 5, 0, 1, 2}, {3, 0, 4, 1, 5, 2}, {3, 1, 0, 5, 4, 2},
		    {4, 5, 3, 2, 0, 1}, {4, 2, 5, 0, 3, 1}, {4, 0, 2, 3, 5, 1}, {4, 3, 0, 5, 2, 1},
		    {5, 4, 2, 3, 1, 0}, {5, 3, 4, 1, 2, 0}, {5, 1, 3, 2, 4, 0}, {5, 3, 1, 4, 2, 0}};
string dice[8];
bool used[8];
int id[8][3] = {{},
		{0},
		{0},
		{1, 2},
		{0},
		{1, 4},
		{2, 4},
		{3, 5, 6}};
int face[8][3] = {{},
		  {2},
		  {5},
		  {5, 2},
		  {4},
		  {4, 2},
		  {4, 0},
		  {4, 5, 2}};
int size[8] = {0, 1, 1, 2, 1, 2, 2, 3};
pair<int, int> now[8];

bool solve(int pos){
  if(pos == 8) return true;
  for(int i=0;i<8;i++){
    if(used[i]) continue;
    used[i] = true;
    for(int j=0;j<24;j++){
      bool f = true;
      for(int k=0;k<size[pos];k++){
	int idx = id[pos][k];
	int a = dice[now[idx].first][data[now[idx].second][face[pos][k]]];
	int b = dice[i][data[j][5-face[pos][k]]];
	if(abs(a-b) != (int)('a' - 'A')) f = false;
      }
      if(!f) continue;
      now[pos] = make_pair(i, j);
      if(solve(pos+1)) return true;
    }
    used[i] = false;
  }
  return false;
}

main(){
  while(cin >> dice[0]){
    if(dice[0] == "0") break;
    for(int i=1;i<8;i++){
      cin >> dice[i];
    }
    fill(used, used+8, false);
    cout << (solve(0)?"YES":"NO") << endl;
  }
  return 0;
}