rendered paste body/*ID: SupoPROG: msquareLANG: C++*///DEDICATED TO EMMA WATSON, THE BRITISH *SUNSHINE*#include <vector>#include <list>#include <map>#include <set>#include <deque>#include <stack>#include <bitset>#include <algorithm>#include <functional>#include <numeric>#include <utility>#include <sstream>#include <iostream>#include <iomanip>#include <cstdio>#include <cmath>#include <cstdlib>#include <ctime>#include <fstream>#define eps 10e-10#define INF 10e15#define PI 3.141592653589793238462#define EU 2.71828182845904523536#define sz(a) (int)a.size()#define pb(a) push_back(a)#define mset(a,hodnota) memset(a,hodnota,sizeof(a))#define wh(a) a.begin(),a.end()#define REP(i,n) for(__typeof(n) i=0;i<(n);++i)#define REPS(i,n) for(int(i)=0;i<int(n.size());++i)#define FOR(i,a,b) for(__typeof(b) i=(a);i<=(b);++i)#define FORD(i,a,b) for(__typeof(a) i=(a);i>=(b);--i)#define FORE(it,c) for(__typeof((c).begin()) it=(c).begin();it!=(c).end();++it)#define pii pair<int,int>#define mp(a,b) make_pair(a,b)#define fi first#define se secondtypedef long long ll;using namespace std;ifstream fin ("msquare.in");ofstream fout ("msquare.out");#define bigPrime 1000003int table[bigPrime];int intToMine(int a){ int ans=0; REP(i,8) { ans<<=3; ans+=(a%10)-1; a/=10; } return ans;}void outpt(string prefix,int a){ cout<<prefix<<" "; REP(i,8) { cout<<((a&7)+1)<<" "; a>>=3; } cout<<endl; }int kde[3][8]={0,1,2,3,4,5,6,7, 3,0,1,2,5,6,7,4, 0,6,1,3,4,2,5,7};inline int op(int ktora,int cur){ int ans=0; REP(i,8) ans<<=3, ans+=((cur>>(kde[ktora][i]*3))&7); return ans; }map<int,int> seen;bool visited(int x){ return seen.find(x)!=seen.end();}void mark(int x,int c){ seen[x]=c;}string getOp(int prev,int next){ REP(i,3) if (next==(i==0?op(i,prev):op(0,op(i,prev)))) return string(1,'A'+i); return "X";}int main( ){ int target=0,start=0; char c; REP(i,8) fin>>c,target<<=3,target+=c-'1',start<<=3,start+=i; target=op(0,target); start=op(0,start); outpt("tar : ",target); outpt("tar : ",start); outpt("testik1 : ",op(0,target)); outpt("testik2 : ",op(0,op(1,target))); outpt("testik3 : ",op(0,op(2,target))); deque<int> Q; Q.pb(start); seen[start]=start; while(sz(Q)) { int cur=Q.front(); if (cur==target) break; Q.pop_front(); REP(i,3) { int novy=i==0?op(i,cur):op(0,op(i,cur)); if (!visited(novy)) { mark(novy,cur); Q.pb(novy); } } } int cur=target; string s=""; do { s=getOp(seen[cur],cur) + s; cur=seen[cur]; }while(cur!=start); if (s=="X") fout<<0<<endl<<endl; else { fout<<sz(s)<<endl; fout<<s<<endl; } return 0;}