#include #include #include using namespace std; bool hsh[1<<13]; char str[15]; const int mp[4][7]={ {0,0,0,0,0,0,0}, {0,1,3,5,2,4,6}, {0,4,2,1,6,5,3}, {0,2,6,3,4,1,5} }; struct node { int m[7]; node t(int id) { node res; for(int i=1;i<=6;i++) res.m[i]=m[mp[id][i]]; return res; } }; inline int f(node n) { return n.m[1]*3+n.m[2]*9+n.m[3]*27+n.m[4]*81+n.m[5]*243+n.m[6]*729; } queue que; void solve() { memset(hsh,0,sizeof(hsh)); while(que.size()) que.pop(); node s,e,t; for(int i=0;i<6;i++) switch(str[i]) { case 'r': s.m[i+1]=0; break; case 'b': s.m[i+1]=1; break; case 'g': s.m[i+1]=2; break; } for(int i=6;i<12;i++) switch(str[i]) { case 'r': e.m[i-5]=0; break; case 'b': e.m[i-5]=1; break; case 'g': e.m[i-5]=2; break; } hsh[f(s)]=1; int so=f(e); if(hsh[so]) { cout<<"TRUE"<>str) solve(); return 0; }