#include<iostream>
#include<queue>
#include<map>
using namespace std;
int ad[4]={-3,-1,+1,+3};
struct mapp
{
int sk,step;
string mp;
}srt,ed;
map<string,bool> vist;
bool check(mapp x)
{
return x.mp==ed.mp;
}
queue<mapp> t;
void bfs()
{
while(!t.empty())
{
mapp u= t.front();
t.pop();
if(vist[u.mp])continue;
vist[u.mp]=1;
if(check(u))
{
cout<<u.step;
return;
}
for(int i=0;i<4;i++)
{
int vk=u.sk+ad[i];
if(vk<1||vk>9)continue;
mapp v=u;
swap(v.mp[u.sk],v.mp[vk]);
v.sk=vk;
v.step=u.step+1;
t.push(v);
}
}
}
int main()
{
cin>>srt.mp;
srt.mp=' '+srt.mp;
ed.mp=" 123804765";
for(int i=1;i<=9;i++)
{
if(srt.mp[i]=='0')
{
srt.sk=i;
break;
}
}
ed.sk=5;
srt.step=0;
t.push(srt);
bfs();
return 0;
}