//这里用到的方法很暴力,就是直接的BFS; //仅能过1150而已,就当做练习下BFS啦 // source code of submission 804105, Zhongshan University Online Judge System #include <iostream> #include <string> #include <queue> using namespace std; struct status { string above, blow; string oper; }start,target; void initial() //状态初始化 { string temp; start.above = "1234"; start.blow = "8765"; target.above = "" ;target.blow = "" ; target.oper = ""; start.oper = ""; for(int i = 0;i < 4;i++) { cin>>temp; target.above += temp; } for(int j = 0;j < 4;j++) { cin>>temp; target.blow += temp; } } status change(status cur, status next,int operation) { if(operation == 1) //A操作,上下行互换 { next.above = cur.blow; next.blow = cur.above; next.oper += "A"; } else if(operation == 2) //B操作,每次以行循环右移一个 { next.above = next.above+cur.above[3]+cur.above[0]+cur.above[1]+cur.above[2]; next.blow = next.blow+cur.blow[3]+cur.blow[0]+cur.blow[1]+cur.blow[2]; next.oper += "B"; } else if(operation == 3) //C操作,中间四小块顺时针转一格 { next.above = next.above+cur.above[0]+cur.blow[1]+cur.above[1]+cur.above[3]; next.blow = next.blow+cur.blow[0]+cur.blow[2]+cur.above[2]+cur.blow[3]; next.oper += "C"; } return next; } bool is_match(status a,status b) //判断两个状态是否相等 { return (a.above==b.above && a.blow==b.blow); } void bfs(int max) { if(is_match(start,target)) { cout<<0<<endl; return ; } queue<status> q; q.push(start); while(true) { status temp = q.front(); q.pop(); if(temp.oper.size() >= max) { cout<<-1<<endl; return ; } for(int i = 1;i <= 3;i++) { status next; next.above = ""; next.blow =""; next.oper=temp.oper; next = change(temp,next,i); if(is_match(next,target)) { cout<<next.oper.size()<<" "<<next.oper<<endl; return ; } q.push(next); } } } int main() { int max; while(cin>>max,max!=-1) { initial(); bfs(max); } return 0; }