#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y,step;
node() {}
node(int _x,int _y,int _step): x(_x),y(_y),step(_step){}
};
int m[4][4],dx[4]={0,0,-1,1},dy[4]={1,-1,0,0};
int n[4][4]={0,0,0,0,0,1,2,3,0,8,0,4,0,7,6,5},xx,yy;
bool vis[4][4];
char s[20];
void print(){
for(int i=1;i<=3;i++){
for(int j=1;j<=3;j++) cout<<m[i][j]<<" ";
cout<<endl;
}
}
void bfs(int x,int y,int a[4][4],int step){
queue<node> q;
q.push({x,y,step});
print();
cout<<endl;
while(!q.empty()){
node p=q.front();
q.pop();
for(int i=0;i<4;i++){
int nx=dx[i]+p.x,ny=dy[i]+p.y;
if(nx>=1&&nx<=3&&ny>=1&&ny<=3&&vis[nx][ny]==0){
int t=a[nx][ny];
a[nx][ny]=a[x][y];
a[x][y]=t;
vis[nx][ny]=1;
bfs(nx,ny,a,p.step+1);
t=a[nx][ny];
vis[nx][ny]=0;
a[nx][ny]=a[x][y];
a[x][y]=t;
}
}
}
}
main(){
cin>>s;
m[1][1]=s[0]-'0',m[1][2]=s[1]-'0',m[1][3]=s[2]-'0';
m[2][1]=s[3]-'0',m[2][2]=s[4]-'0',m[2][3]=s[5]-'0';
m[3][1]=s[6]-'0',m[3][2]=s[7]-'0',m[3][3]=s[8]-'0';
for(int i=1;i<=3;i++){
for(int j=1;j<=3;j++){
if(m[i][j]==0){
xx=i,yy=j;
break;
}
}
}
bfs(xx,yy,m,0);
return 0;
}
零分!!!!!!啊!!!!!!!!!114514!!!!!!!!!