hdu1043:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
typedef long long ll;
int a[10];
int vis[400000];
int way[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int pre[400000];
int Hash[10]={1,1,2,6,24,120,720,5040,40320};
int endd=46233;
struct node
{
int mp[3][3];
int g,h;
int x,y;
int hashn;
bool operator<(const node n1)const
{
return h!=n1.h?h>n1.h:g>n1.g;
}
bool check()
{
if(x>=0&&x<3&&y>=0&&y<3)
return 1;
return 0;
}
}s,u,v;
int get_h(node x)
{
int ans=0;
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
if(x.mp[i][j])
{
ans+=abs(i-(x.mp[i][j]-1)/3)+abs(j-(x.mp[i][j]-1)%3);
}
}
}
return ans;
}
bool isok(node tmp)
{
int a[9],k=0;
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[k++]=tmp.mp[i][j];
int sum=0;
for(int i=0;i<9;i++)
for(int j=i+1;j<9;j++)
if(a[j]&&a[i]&&a[i]>a[j])
sum++;
return !(sum&1);
}
int get_hash(node tmp)
{
int a[9],k=0;
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
a[k++]=tmp.mp[i][j];
int res=0;
for(int i=0;i<9;i++)
{
int k=0;
for(int j=i+1;j<9;j++)
if(a[j]<a[i])
k++;
res+=Hash[8-i]*k;
}
return res;
}
void Astar()
{
priority_queue<node> q;
q.push(s);
while(!q.empty())
{
u=q.top();
q.pop();
for(int i=0;i<4;i++)
{
v=u;
v.x+=way[i][0];
v.y+=way[i][1];
if(v.check())
{
swap(v.mp[v.x][v.y],v.mp[u.x][u.y]);
v.hashn=get_hash(v);
if(vis[v.hashn]==-1)
{
v.g++;
vis[v.hashn]=i;
v.h=get_h(v);
pre[v.hashn]=u.hashn;
q.push(v);
}
if(v.hashn==endd) return;
}
}
}
}
void print(){
string ans;
ans.clear();
int nxt=endd;
while(pre[nxt]!=-1)
{ //从终点往起点找路径
switch(vis[nxt])
{ //四个方向对应
case 0:ans+='r';break;
case 1:ans+='l';break;
case 2:ans+='d';break;
case 3:ans+='u';break;
}
nxt=pre[nxt];
}
for(int i=ans.size()-1;i>=0;i--)
putchar(ans[i]);
puts("");
}
int main()
{
memset(vis,-1,sizeof(vis));
memset(pre,-1,sizeof(pre));
char a[10000];
int b[10],t=0;
gets(a);
for(int i=0;i<strlen(a);i++)
{
if(a[i]>='0'&&a[i]<='9') b[t++]=a[i]-'0';
if(a[i]=='x') {b[t++]=0; s.x=(t-1)/3; s.y=(t-1)%3;}
}
//for(int i=0;i<t;i++)
// printf("%d ",b[i]);
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
s.mp[i][j]=b[i*3+j];
if(!isok(s))
printf("unsolveable\n");
s.hashn=get_hash(s);
if(s.hashn==endd)
{
puts("");
}
vis[s.hashn]=-2;
s.g=0;
s.h=get_h(s);
Astar();
print();
return 0;
}