#include #include #include #include #include #include using namespace std; int a[7],y[1000000][7],br,used[1000000],rect[1000000],connection[4][10],count1[1000000],used1[1000000],cost[1000000],Z,n; int graph[1000000][4],color[200][200][3],aim[200][200][3],list[1000000],br5=0; string moves[1000000],answer; std::clock_t start; double duration; char ch[3],direction[1000000][4]; void perm(int x,int n) { used[x]=1; a[n-1]=x; if(n==6) { int seven=1,place=0;; for(int i=n-1; i>=0; i--) { y[br][i]=a[i]; place+=a[i]*seven; seven*=7; } rect[place]=br; br++; } for(int i=1; i<=6; i++) { if(!used[i]) { perm(i,n+1); } } used[x]=0; } void connect() { int br1=1; for(int i=0; i=3) swap(connection[0][x],connection[0][x-3]),ch[0]='U'; else swap(connection[0][x],connection[0][x+3]),ch[0]='D'; if(x!=2&&x!=5) { swap(connection[br1][x],connection[br1][x+1]); ch[br1]='R'; br1++; } if(x!=0&&x!=3) { swap(connection[br1][x],connection[br1][x-1]); ch[br1]='L'; br1++; } graph[i][0]=br1; for(int j=0; j=0; k--) { place+=seven*connection[j][k]; seven*=7; } graph[i][j]=rect[place]; direction[i][j]=ch[j]; } count1[i]=br1; } } int bfs(int v) { v=rect[v]; used1[v]=1; queue q; q.push(v); int size1=1; int br3=0; moves[v]=""; while(!q.empty()) { for(int i=0; i>Z; for(int i=0; i<200; i++) for(int j=0; j<200; j++) scanf("%d %d %d",&color[i][j][0],&color[i][j][1],&color[i][j][2]); for(int i=0; i4.0) return; for(randi=0;randicurcost)) { endans=curans; endrandi=randi; endrandj=randj; endcost=curcost; endmovecomposition=moves[list[ansi]]; } } if(endans<0&&answer.length()+endcost<500) { swap_positions(maxi,maxj,endrandi,endrandj); answer+=endmovecomposition; for(int i=0;imaxdif) { maxdif=dif; maxdifi=i; maxdifj=j; } } } cout<