#include<bits/stdc++.h>
using namespace std;
string st,ed;
queue<string> q[2];
map<string,int> mp[2];
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
int extend(int k){
int dep=mp[k][q[k].front()];
while(q[k].size()&&dep==mp[k][q[k].front()]){
string now=q[k].front();q[k].pop();
if(mp[k^1].count(now)) return mp[k][now]+mp[k^1][now];
int x,y;
for(int i=0;i<now.size();i++){
if(now[i]=='0'){
x=i/3;
y=i%3;
break;
}
}
for(int i=0;i<4;i++){
int nx=x+dx[i],ny=y+dy[i];
if(nx<0||nx>2||ny<0||ny>2) continue;
swap(now[nx*3+ny],now[x*3+y]);
if(mp[k].count(now)){
swap(now[nx*3+ny],now[x*3+y]);
continue;
}
q[k].push(now);mp[k][now]=dep+1;
swap(now[nx*3+ny],now[x*3+y]);
}
}
return -1;
}
int bfs(){
q[0].push(st);mp[0][st]=0;q[1].push(ed);mp[1][ed]=1;
int t;
while(q[0].size()&&q[1].size()){
if(q[0].size()<=q[1].size()) t=extend(0);
else t=extend(1);
if(t!=-1) return t;
}
}
int main(){
cin>>st;
cout<<bfs();
return 0;
}