Wa on #7.
#include<bits/stdc++.h>
using namespace std;
const int dx[2]={1,0},dy[2]={0,1};
struct node{int a,b,c,d;}ans[100];
int flag;char c[4][4],to[4][4];
int g(int cnt=0){
for(int i=0;i<4;i++)for(int j=0;j<4;j++)if(c[i][j]!=to[i][j])cnt++;
return cnt>>1;
}void print(int step){
cout<<step<<'\n';
for(int i=0;i<step;i++)cout<<ans[i].a<<ans[i].b<<ans[i].c<<ans[i].d<<'\n';
exit(0);
}void dfs(int step,int ms){
if(step+g()>ms)return;
if(!g())return print(step);
for(int i=0;i<4;i++)for(int j=0;j<4;j++)for(int t=0;t<2;t++){
int tx=i+dx[t],ty=j+dy[t];
swap(c[i][j],c[tx][ty]);
ans[step]={i+1,j+1,tx+1,ty+1},dfs(step+1,ms);
swap(c[i][j],c[tx][ty]);
}
}int main(){
for(int i=0;i<4;i++)for(int j=0;j<4;j++)cin>>c[i][j];
for(int i=0;i<4;i++)for(int j=0;j<4;j++)cin>>to[i][j];
for(int ms=0;;ms++)dfs(0,ms);
return 0;
}