#include <bits/stdc++.h>
using namespace std;
int main() {
string pent[][5] ={
{"01100","11000","01000","00000","00000"},
{"10000","10000","10000","10000","10000"},
{"10000","10000","10000","11000","00000"},
{"01000","01000","11000","10000","00000"},
{"11000","11000","10000","00000","00000"},
{"11100","01000","01000","00000","00000"},
{"10100","11100","00000","00000","00000"},
{"10000","10000","11100","00000","00000"},
{"10000","11000","01100","00000","00000"},
{"01000","11100","01000","00000","00000"},
{"01000","11000","01000","01000","00000"},
{"11000","01000","01100","00000","00000"}};
string pentN ="FILNPTUVWXYZ";
string s,t;
while(cin >> s >> t) {
long long p =999983, mod =1000000007;
int p1, p2, p3, p4;
for(int i =0; i < pentN.length(); i++) if(s[0] == pentN[i]) p1 =i;
for(int i =0; i < pentN.length(); i++) if(s[1] == pentN[i]) p2 =i;
for(int i =0; i < pentN.length(); i++) if(t[0] == pentN[i]) p3 =i;
for(int i =0; i < pentN.length(); i++) if(t[1] == pentN[i]) p4 =i;
set<long long> S;
int dx[] ={1,-1,0,0};
int dy[] ={0,0,1,-1};
int M[15][15];
for(int i =0; i < 225; i++) M[i/15][i%15] =0;
for(int rot =0; rot < 16; rot++) {
vector< pair<int,int> > surA;
for(int i =0; i < 25; i++) if(pent[p1][i/5][i%5] == '1') {
if(rot/4 == 0) surA.push_back(make_pair(i/5,i%5));
if(rot/4 == 1) surA.push_back(make_pair(i/5,4-i%5));
if(rot/4 == 2) surA.push_back(make_pair(4-i/5,i%5));
if(rot/4 == 3) surA.push_back(make_pair(4-i/5,4-i%5));
if(rot/4 == 4) surA.push_back(make_pair(i%5,i/5));
if(rot/4 == 5) surA.push_back(make_pair(i%5,4-i/5));
if(rot/4 == 6) surA.push_back(make_pair(4-i%5,i/5));
if(rot/4 == 7) surA.push_back(make_pair(4-i%5,4-i/5));}
vector< pair<int,int> > surB;
for(int i =0; i < 25; i++) if(pent[p2][i/5][i%5] == '1') {
if(rot%4 == 0) surB.push_back(make_pair(i/5,i%5));
if(rot%4 == 1) surB.push_back(make_pair(i/5,4-i%5));
if(rot%4 == 2) surB.push_back(make_pair(4-i/5,i%5));
if(rot%4 == 3) surB.push_back(make_pair(4-i/5,4-i%5));
if(rot%4 == 4) surB.push_back(make_pair(i%5,i/5));
if(rot%4 == 5) surB.push_back(make_pair(i%5,4-i/5));
if(rot%4 == 6) surB.push_back(make_pair(4-i%5,i/5));
if(rot%4 == 7) surB.push_back(make_pair(4-i%5,4-i/5));}
for(int i =0; i < 5; i++) for(int j =0; j < 4; j++) for(int k =0; k < 5; k++) {
int x =surA[i].first+dx[j]-surB[k].first, y =surA[i].second+dy[j]-surB[k].second;
bool ok =true;
for(int l =0; l < 5; l++) M[5+surA[l].first][5+surA[l].second]++;
for(int l =0; l < 5; l++) {
M[5+surB[l].first+x][5+surB[l].second+y]++;
if(M[5+surB[l].first+x][5+surB[l].second+y] > 1) {ok =false; break;}}
if(ok) {
// hashuj
int minX =15, minY =15;
for(int l =0; l < 225; l++) if(M[l/15][l%15] == 1) {
minX =min(minX,l/15);
minY =min(minY,l%15);}
long long H =0;
for(int l =0; l < 225; l++) {
H =(p*H+1+((l/15+minX >= 15 || l%15+minY >= 15)?0:M[l/15+minX][l%15+minY]))%mod;
if(H < 0) H +=mod;}
S.insert(H);}
for(int l =0; l < 5; l++) M[5+surA[l].first][5+surA[l].second] =0;
for(int l =0; l < 5; l++) M[5+surB[l].first+x][5+surB[l].second+y] =0;
}
}
bool xyz =false;
for(int rot =0; rot < 8; rot++) {
vector< pair<int,int> > surA;
for(int i =0; i < 25; i++) if(pent[p3][i/5][i%5] == '1')
surA.push_back(make_pair(i/5,i%5));
vector< pair<int,int> > surB;
for(int i =0; i < 25; i++) if(pent[p4][i/5][i%5] == '1') {
if(rot == 0) surB.push_back(make_pair(i/5,i%5));
if(rot == 1) surB.push_back(make_pair(i/5,4-i%5));
if(rot == 2) surB.push_back(make_pair(4-i/5,i%5));
if(rot == 3) surB.push_back(make_pair(4-i/5,4-i%5));
if(rot == 4) surB.push_back(make_pair(i%5,i/5));
if(rot == 5) surB.push_back(make_pair(i%5,4-i/5));
if(rot == 6) surB.push_back(make_pair(4-i%5,i/5));
if(rot == 7) surB.push_back(make_pair(4-i%5,4-i/5));}
for(int i =0; i < 5; i++) if(!xyz) for(int j =0; j < 4; j++) if(!xyz) for(int k =0; k < 5; k++) {
int x =surA[i].first+dx[j]-surB[k].first, y =surA[i].second+dy[j]-surB[k].second;
bool ok =true;
for(int l =0; l < 5; l++) M[5+surA[l].first][5+surA[l].second]++;
for(int l =0; l < 5; l++) {
M[5+surB[l].first+x][5+surB[l].second+y]++;
if(M[5+surB[l].first+x][5+surB[l].second+y] > 1) {ok =false; break;}}
if(ok) {
// hashuj
int minX =15, minY =15;
for(int l =0; l < 225; l++) if(M[l/15][l%15] == 1) {
minX =min(minX,l/15);
minY =min(minY,l%15);}
long long H =0;
for(int l =0; l < 225; l++) {
H =(p*H+1+((l/15+minX >= 15 || l%15+minY >= 15)?0:M[l/15+minX][l%15+minY]))%mod;
if(H < 0) H +=mod;}
if(S.find(H) != S.end()) xyz =true;}
if(xyz) break;
for(int l =0; l < 5; l++) M[5+surA[l].first][5+surA[l].second] =0;
for(int l =0; l < 5; l++) M[5+surB[l].first+x][5+surB[l].second+y] =0;
}
if(xyz) break;}
if(xyz) cout << "YES\n";
else cout << "NO\n";}
return 0;}