#include<bits/stdc++.h>
using namespace std;
vector<int> turn(vector<int> v, int k, ...){
va_list valist;
va_start(valist, k);
while(k--){
int n = va_arg(valist, int);
v[n] += 3;
if(v[n] > 12)
v[n] -= 12;
if(v[n] == 0)
v[n] = 12;
}va_end(valist);
return v;
}bool check(vector<int> v){
for(int i: v){
if(i != 12)
return 0;
}return 1;
}void operator>>(istream &is, vector<int> &v){
for(int i = 0; i < 9; ++i){
int k;
cin >> k;
v.push_back(k);
}
}void operator<<(ostream &os, vector<int> &v){
for(int i: v)
cout << i << ' ';
}bool operator<(vector<int> v1, vector<int> v2){
return v1[0] < v2[0];
}vector<int> operator+(vector<int> v, int k){
v.push_back(k);
return v;
}vector<int> v;
deque<pair<vector<int>, vector<int>>> dq;
set<vector<int>> s;
int main(){
cin >> v;
dq.push_back(pair<vector<int>, vector<int>>(v, vector<int>()));
while(dq.size()){
pair<vector<int>, vector<int>> p(dq[0]);
vector<int> v1;
for(int i = 1; i <= 9; ++i){
switch(i){
case 1:{
v1 = turn(p.first, 4, 0, 1, 2, 3);
break;
}case 2:{
v1 = turn(p.first, 3, 0, 1, 2);
break;
}case 3:{
v1 = turn(p.first, 4, 1, 2, 4, 5);
break;
}case 4:{
v1 = turn(p.first, 3, 0, 3, 6);
break;
}case 5:{
v1 = turn(p.first, 5, 1, 3, 4, 5, 7);
break;
}case 6:{
v1 = turn(p.first, 3, 2, 5, 8);
break;
}case 7:{
v1 = turn(p.first, 4, 3, 4, 5, 6);
break;
}case 8:{
v1 = turn(p.first, 3, 6, 7, 8);
break;
}case 9:{
v1 = turn(p.first, 4, 4, 5, 7, 8);
break;
}
}vector<int> v2 = p.second + i;
if(s.count(v1))
continue;
s.insert(v1);
dq.push_back(pair<vector<int>, vector<int>>(v1, v2));
if(check(v1)){
cout << v2;
return 0;
}
}
dq.pop_front();
}return 0;
}