#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
// Coi mỗi trạng thái bảng là một đỉnh trong đồ thị, còn thao tác biến đổi bảng chính là cạnh
// Ta sẽ hash bảng sang một số ở hệ 9 (các chữ số có giá trị từ 0 -> 8)
int pow9[10];
void precompute() {
pow9[0] = 1;
for (int i = 1; i <= 9; i++) pow9[i] = pow9[i - 1] * 9;
}
// Hoán đổi chữ số ở vị trí i và j của u cho nhau
int swap(int u, int i, int j) {
int digit_i = u / pow9[i] % 9;
int digit_j = u / pow9[j] % 9;
int v = u - pow9[i] * digit_i - pow9[j] * digit_j;
v += pow9[i] * digit_j + pow9[j] * digit_i;
return v;
}
// Ta sẽ chỉ xét thao tác swap ô (x, y) với ô nằm bên phải và ô nằm phía dưới nó
// Giả sử ô (x, y) (toạ độ 2D) tương ứng với vị trí i (toạ độ 1D)
// Thì ô (x, y + 1) sẽ tương ứng với vị trí i + 1 (i % 3 != 2 hay tồn tại ô (x, y + 1))
// ô (x + 1, y) sẽ tương ứng với vị trí i + 3 (i + 3 < 9 hay tồn tại ô (x + 1, y))
void bfs(int s, int t) {
vector<bool> vis(pow9[9], false);
queue<ii> q;
vis[s] = true;
q.push({s, 0});
while (!q.empty()) {
ii front = q.front(); q.pop();
int u = front.first, d = front.second;
if (u == t) {
cout << d << '\n';
break;
}
for (int i = 0; i < 9; i++) {
if (i % 3 != 2) {
int v = swap(u, i, i + 1);
if (!vis[v]) {
vis[v] = true;
q.push({v, d + 1});
}
}
if (i + 3 < 9) {
int v = swap(u, i, i + 3);
if (!vis[v]) {
vis[v] = true;
q.push({v, d + 1});
}
}
}
}
} // O(9! * 9 * 2)
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
precompute();
int s = 0;
for (int i = 0; i < 9; i++) {
int num; cin >> num;
--num;
s += pow9[i] * num;
}
int t = 0;
for (int i = 0; i < 9; i++) {
t += pow9[i] * i;
}
bfs(s, t);
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKLy8gQ29pIG3hu5dpIHRy4bqhbmcgdGjDoWkgYuG6o25nIGzDoCBt4buZdCDEkeG7iW5oIHRyb25nIMSR4buTIHRo4buLLCBjw7JuIHRoYW8gdMOhYyBiaeG6v24gxJHhu5VpIGLhuqNuZyBjaMOtbmggbMOgIGPhuqFuaAovLyBUYSBz4bq9IGhhc2ggYuG6o25nIHNhbmcgbeG7mXQgc+G7kSDhu58gaOG7hyA5IChjw6FjIGNo4buvIHPhu5EgY8OzIGdpw6EgdHLhu4sgdOG7qyAwIC0+IDgpCmludCBwb3c5WzEwXTsgCgp2b2lkIHByZWNvbXB1dGUoKSB7Cglwb3c5WzBdID0gMTsgCglmb3IgKGludCBpID0gMTsgaSA8PSA5OyBpKyspIHBvdzlbaV0gPSBwb3c5W2kgLSAxXSAqIDk7IAp9CgovLyBIb8OhbiDEkeG7lWkgY2jhu68gc+G7kSDhu58gduG7iyB0csOtIGkgdsOgIGogY+G7p2EgdSBjaG8gbmhhdQppbnQgc3dhcChpbnQgdSwgaW50IGksIGludCBqKSB7CglpbnQgZGlnaXRfaSA9IHUgLyBwb3c5W2ldICUgOTsgIAoJaW50IGRpZ2l0X2ogPSB1IC8gcG93OVtqXSAlIDk7IAoJaW50IHYgPSB1IC0gcG93OVtpXSAqIGRpZ2l0X2kgLSBwb3c5W2pdICogZGlnaXRfajsgCgl2ICs9IHBvdzlbaV0gKiBkaWdpdF9qICsgcG93OVtqXSAqIGRpZ2l0X2k7ICAKCXJldHVybiB2OyAKfQoKLy8gVGEgc+G6vSBjaOG7iSB4w6l0IHRoYW8gdMOhYyBzd2FwIMO0ICh4LCB5KSB24bubaSDDtCBu4bqxbSBiw6puIHBo4bqjaSB2w6Agw7QgbuG6sW0gcGjDrWEgZMaw4bubaSBuw7MKLy8gR2nhuqMgc+G7rSDDtCAoeCwgeSkgKHRv4bqhIMSR4buZIDJEKSB0xrDGoW5nIOG7qW5nIHbhu5tpIHbhu4sgdHLDrSBpICh0b+G6oSDEkeG7mSAxRCkKLy8gVGjDrCDDtCAoeCwgeSArIDEpIHPhur0gdMawxqFuZyDhu6luZyB24bubaSB24buLIHRyw60gaSArIDEgKGkgJSAzICE9IDIgaGF5IHThu5NuIHThuqFpIMO0ICh4LCB5ICsgMSkpCi8vICAgICDDtCAoeCArIDEsIHkpIHPhur0gdMawxqFuZyDhu6luZyB24bubaSB24buLIHRyw60gaSArIDMgKGkgKyAzIDwgOSBoYXkgdOG7k24gdOG6oWkgw7QgKHggKyAxLCB5KSkKdm9pZCBiZnMoaW50IHMsIGludCB0KSB7Cgl2ZWN0b3I8Ym9vbD4gdmlzKHBvdzlbOV0sIGZhbHNlKTsgCglxdWV1ZTxpaT4gcTsgCgl2aXNbc10gPSB0cnVlOyAgCglxLnB1c2goe3MsIDB9KTsgICAKCgl3aGlsZSAoIXEuZW1wdHkoKSkgewoJCWlpIGZyb250ID0gcS5mcm9udCgpOyBxLnBvcCgpOyAgCgkJaW50IHUgPSBmcm9udC5maXJzdCwgZCA9IGZyb250LnNlY29uZDsgIAoKCQlpZiAodSA9PSB0KSB7CgkJCWNvdXQgPDwgZCA8PCAnXG4nOyAKCQkJYnJlYWs7IAoJCX0KCgkJZm9yIChpbnQgaSA9IDA7IGkgPCA5OyBpKyspIHsKCQkJaWYgKGkgJSAzICE9IDIpIHsKCQkJCWludCB2ID0gc3dhcCh1LCBpLCBpICsgMSk7IAoJCQkJaWYgKCF2aXNbdl0pIHsKCQkJCQl2aXNbdl0gPSB0cnVlOyAKCQkJCQlxLnB1c2goe3YsIGQgKyAxfSk7IAoJCQkJfQoJCQl9CgkJCWlmIChpICsgMyA8IDkpIHsKCQkJCWludCB2ID0gc3dhcCh1LCBpLCBpICsgMyk7IAoJCQkJaWYgKCF2aXNbdl0pIHsKCQkJCQl2aXNbdl0gPSB0cnVlOyAKCQkJCQlxLnB1c2goe3YsIGQgKyAxfSk7IAoJCQkJfQoJCQl9CgkJfQoJfQp9IC8vIE8oOSEgKiA5ICogMikKCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyAKCWNpbi50aWUobnVsbHB0cik7IAkKCXByZWNvbXB1dGUoKTsgIAoKCWludCBzID0gMDsgICAKCWZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKSB7CgkJaW50IG51bTsgY2luID4+IG51bTsgICAKCQktLW51bTsgCgkJcyArPSBwb3c5W2ldICogbnVtOyAgCgl9CgkJCglpbnQgdCA9IDA7ICAKCWZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKSB7CgkJdCArPSBwb3c5W2ldICogaTsgIAoJfQoKCWJmcyhzLCB0KTsgIAp9