#include <bits/stdc++.h>
using namespace std;
map<int,int> M;
int main(){
// freopen(".in", "r", stdin);
// freopen(".out", "w", stdout);
int a;
cin >> a;
queue<int> Q;
Q.push(a);
M[a] = 0;
while (Q.empty() == false){
int f = Q.front();
Q.pop();
int m[4][4];
m[1][1] = a / 100000000;
m[1][2] = a / 10000000 % 10;
m[1][3] = a / 1000000 % 10;
m[2][1] = a / 100000 % 10;
m[2][2] = a / 10000 % 10;
m[2][3] = a / 1000 % 10;
m[3][1] = a / 100 % 10;
m[3][2] = a / 10 % 10;
m[3][3] = a % 10;
for (int i = 1; i <= 3; ++i)
for (int j = 1; j <= 3; ++j)
if (m[i][j] == 0){
if (i - 1 >= 1){
swap(m[i][j], m[i - 1][j]);
int p = m[1][1] * 100000000 + m[1][2] * 10000000 + m[1][3] * 1000000 + m[2][1] * 100000 + m[2][2] * 10000 + m[2][3] * 1000 + m[3][1] * 100 + m[3][2] * 10 + m[3][3];
if (M.count(p) == false){
Q.push(p);
M[p] = M[f + 1];
}
swap(m[i][j], m[i - 1][j]);
}
if (j - 1 >= 1){
swap(m[i][j], m[i][j - 1]);
int p = m[1][1] * 100000000 + m[1][2] * 10000000 + m[1][3] * 1000000 + m[2][1] * 100000 + m[2][2] * 10000 + m[2][3] * 1000 + m[3][1] * 100 + m[3][2] * 10 + m[3][3];
if (M.count(p) == false){
Q.push(p);
M[p] = M[f + 1];
}
swap(m[i][j], m[i][j - 1]);
}
if (i + 1 <= 3){
swap(m[i][j], m[i + 1][j]);
int p = m[1][1] * 100000000 + m[1][2] * 10000000 + m[1][3] * 1000000 + m[2][1] * 100000 + m[2][2] * 10000 + m[2][3] * 1000 + m[3][1] * 100 + m[3][2] * 10 + m[3][3];
if (M.count(p) == false){
Q.push(p);
M[p] = M[f + 1];
}
swap(m[i][j], m[i + 1][j]);
}
if (j + 1 <= 3){
swap(m[i][j], m[i][j + 1]);
int p = m[1][1] * 100000000 + m[1][2] * 10000000 + m[1][3] * 1000000 + m[2][1] * 100000 + m[2][2] * 10000 + m[2][3] * 1000 + m[3][1] * 100 + m[3][2] * 10 + m[3][3];
if (M.count(p) == false){
Q.push(p);
M[p] = M[f + 1];
}
swap(m[i][j], m[i][j + 1]);
}
}
}
cout << M[123804765] << endl;
return 0;
}
rt,求助,洛谷有