#include <iostream>
#include<set>
#include<queue>
#include<cstring>
#include<string>
using namespace std;
struct state
{
int bx,by,step;
char ch[3][3];
state(int x,int y,int s):bx(x),by(y),step(s){}
};
char bs[3][3],es[3][3];
int offset[4][2]={1,0,0,1,-1,0,0,-1};
queue<state>q;
set<int>st;
int cal_int(state obj)
{
int sum=0;
for(int i=0;i<3;++i)
for(int j=0;j<3;++j)
{
if(obj.ch[i][j]!='.') sum=sum*10+(obj.ch[i][j]-'0');
else sum=sum*10+9;//将点'.'表示为9
}
return sum;
}
bool is_end(state cur)
{
for(int i=0;i<3;++i)
for(int j=0;j<3;++j)
if(cur.ch[i][j]!=es[i][j]) return false;
return true;
}
void bfs()
{
st.clear();
if(!q.empty())
st.insert(cal_int(q.front()));
while(!q.empty())
{
state cur=q.front();
q.pop();
if(is_end(cur)) {cout<<cur.step<<endl; return;}
for(int i=0;i<4;++i)
{
int nextx=cur.bx+offset[i][0];
int nexty=cur.by+offset[i][1];
if(nextx<0||nextx>2||nexty<0||nexty>2) continue;
state nst=state(nextx,nexty,cur.step+1);
memcpy(nst.ch,cur.ch,sizeof(cur.ch));
char temp=nst.ch[nextx][nexty];
nst.ch[nextx][nexty]='.';
nst.ch[cur.bx][cur.by]=temp;
int int_val=cal_int(nst);
if(st.find(int_val)!=st.end()) continue;
st.insert(int_val);
q.push(nst);
}
}
cout<<-1<<endl;
return ;
}
int main()
{
string begin_state,end_state;
cin>>begin_state>>end_state;
int k=0,bx,by;
for(int i=0;i<3;++i)
for(int j=0;j<3;++j){
if(begin_state[k]!='.') bs[i][j]=begin_state[k++];
else {
bx=i;
by=j;
bs[i][j]=begin_state[k++];
}
}
state cur_state=state(bx,by,0);
memcpy(cur_state.ch,bs,sizeof(bs));
q.push(cur_state);
k=0;
for(int i=0;i<3;++i)
for(int j=0;j<3;++j)
es[i][j]=end_state[k++];
bfs();
return 0;
}