#include #include #include #include #include using namespace std; typedef long long LL; const LL KEndStatus=123804765; unordered_map res; int main() { #ifdef local freopen("pro.in","r",stdin); #endif res[KEndStatus]=0; queue Q; Q.push(KEndStatus); while(Q.size()) { LL u=Q.front(); Q.pop(); int distu=res[u]; int rid[9]={2,2,2,1,1,1,0,0,0}; int cid[9]={2,1,0,2,1,0,2,1,0}; int dr[4]={0,-1,0,1}; int dc[4]={-1,0,1,0}; int mpu[3][3],ur,uc; LL utmp=u; for(int i=0;i<9;i++) { mpu[rid[i]][cid[i]]=utmp%10; utmp/=10; if(mpu[rid[i]][cid[i]]==0) { ur=rid[i]; uc=cid[i]; } } for(int f=0;f<4;f++) { int vr=ur+dr[f],vc=uc+dc[f]; if(vr==-1||vr==3||vc==-1||vc==3) continue; swap(mpu[ur][uc],mpu[vr][vc]); LL v=0; for(int r=0;r<3;r++) for(int c=0;c<3;c++) v=v*10+mpu[r][c]; if(v!=KEndStatus&&res[v]==0) { res[v]=distu+1; Q.push(v); } swap(mpu[ur][uc],mpu[vr][vc]); } } LL query; scanf("%lld",&query); printf("%d\n",res[query]); return 0; }