#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int num[9], ini;
int L;
bool flag;
int mv[4] = {1, 3, -1, -3};//right down left up
int path[1001];
int len;
char map[4] = {'r', 'd', 'l', 'u'};
void read()
{
char s[2];
for(int i = 0; i < 9; i ++)
{
scanf("%s", s);
if(s[0] == 'x') {num[i] = 0; ini = i;}
else num[i] = s[0] - '0';
}
}
bool ok() // jud for destination
{
for(int i = 0; i < 8; i ++)
if(num[i] != i + 1) return false;
return true;
}
bool jud(int pos, int i) //jud for right
{
if(pos % 3 != 2 && i == 0) return true;
if(pos < 6 && i == 1) return true;
if(pos % 3 != 0 && i == 2) return true;
if(pos > 2 && i == 3) return true;
return false;
}
int cal()
{
int cost = 0;
for(int i = 0; i < 9; i ++)
if(num[i])
cost += abs((num[i] - 1)%3 - i%3) + abs((num[i] - 1)/3 - i/3);
return cost;
}
void dfs(int pos, int deep)
{
int i, J, cost;
if(deep == L)
{
if(ok()) flag = true;
return;
}
for(i = 0; i < 4; i ++)
{
if(!jud(pos, i)) continue;
num[pos] ^= num[pos + mv[i]] ^= num[pos] ^= num[pos + mv[i]];//state change
cost = cal();
if(cost + deep < L)
{
path[len++] = i;
dfs(pos + mv[i], deep + 1);
if(flag) return;
len --;
}
num[pos] ^= num[pos + mv[i]] ^= num[pos] ^= num[pos + mv[i]];//state again
}
}
void out()
{
int i;
//printf("%d\n",len);
for(i = 0; i < len; i ++)
printf("%c", map[path[i]]);
puts("");
}
int main()
{
read();
L = 1; len = 0;
flag = false;
while(!flag)
{
dfs(ini, 0);
L ++;
}
out();
}