#include <iostream>
#include <bits/stdc++.h>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#define You_ss_ef ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define pi 3.141592654
#define tc int T; cin >> T; while (T--)
#define FP(_) fixed << std::setprecision(_)
#define Gaza main
#define ll long long
#define ld long double
#define ss << ' '
#define el << '\n'
#define all(_) _.begin(), _.end()
#define rall(_) _.rbegin(), _.rend()
#define uni(_) _.erase(unique(all(_)), _.end())
using namespace std;
void IO() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
}
int dx[] = { 1 , -1 , 0 , 0 , 1 , 1 , -1 , -1 };
int dy[] = { 0 , 0 , -1 , 1 , 1 , -1 , -1 , 1 };
int ans = 0;
vector <int> num;
vector <pair<int,int>> idx;
vector <vector <int>> v;
bool valid()
{
vector <pair<int,pair<int,int>>> a;
for(int i = 1; i <= 3; i++) {
for(int j = 1; j <= 3; j++) {
a.push_back({v[i][j],{i,j}});
}
}
int cnt = 0;
for(int i = 1; i < 9; i++) {
int x1 = a[i].second.first , y1 = a[i].second.second;
int x2 = a[i+1].second.first , y2 = a[i+1].second.second;
if(abs(x1-x2) == 1 or abs(y1-y2) == 1) cnt++;
}
return cnt == 8;
}
void answer()
{
set <int> st;
v = vector <vector <int>> (5, vector <int> (5,150));
for(int i = 1; i <= 3; i++) {
for(int j = 1; j <= 3; j++) {
char x; cin >> x;
v[i][j] = x - '0';
if(!v[i][j]) idx.push_back({i,j});
st.emplace(v[i][j]);
}
}
for(int i = 1; i <= 9; i++) {
if(!st.count(i)) num.push_back(i);
}
do {
for(int i = 0; i < idx.size(); i++) {
int x = idx[i].first , y = idx[i].second;
v[x][y] = num[i];
}
if(valid()) {
ans++;
for(int i = 1; i <= 3; i++) {
for(int j = 1; j <= 3; j++) {
cout << v[i][j] ss;
}
cout el ;
}
cout el;
}
} while(next_permutation(all(num)));
cout << ans;
}
int Gaza()
{ You_ss_ef
IO();
int TC = 1;
// cin >> TC;
do {
answer();
TC--;
if (TC)
cout el;
} while (TC != 0);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8c3RyaW5nPgojZGVmaW5lIFlvdV9zc19lZiBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApO2Npbi50aWUoMCk7Y291dC50aWUoMCk7CiNkZWZpbmUgcGkgMy4xNDE1OTI2NTQKI2RlZmluZSB0YyBpbnQgVDsgY2luID4+IFQ7IHdoaWxlIChULS0pCiNkZWZpbmUgRlAoXykgZml4ZWQgPDwgc3RkOjpzZXRwcmVjaXNpb24oXykKI2RlZmluZSBHYXphIG1haW4KI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBsZCBsb25nIGRvdWJsZQojZGVmaW5lIHNzIDw8ICcgJwojZGVmaW5lIGVsIDw8ICdcbicKI2RlZmluZSBhbGwoXykgXy5iZWdpbigpLCBfLmVuZCgpCiNkZWZpbmUgcmFsbChfKSBfLnJiZWdpbigpLCBfLnJlbmQoKQojZGVmaW5lIHVuaShfKSBfLmVyYXNlKHVuaXF1ZShhbGwoXykpLCBfLmVuZCgpKQp1c2luZyBuYW1lc3BhY2Ugc3RkOwp2b2lkIElPKCkgewojaWZuZGVmIE9OTElORV9KVURHRQpmcmVvcGVuKCJpbnB1dC50eHQiLCAiciIsIHN0ZGluKTsKZnJlb3Blbigib3V0cHV0LnR4dCIsICJ3Iiwgc3Rkb3V0KTsKI2VuZGlmCn0gCmludCBkeFtdID0geyAxICwgLTEgLCAwICwgMCAsIDEgLCAxICwgLTEgLCAtMSB9OwppbnQgZHlbXSA9IHsgMCAsIDAgLCAtMSAsIDEgLCAxICwgLTEgLCAtMSAsIDEgfTsKaW50IGFucyA9IDA7IAp2ZWN0b3IgPGludD4gbnVtOwp2ZWN0b3IgPHBhaXI8aW50LGludD4+IGlkeDsKdmVjdG9yIDx2ZWN0b3IgPGludD4+IHY7CmJvb2wgdmFsaWQoKSAKewogICAgdmVjdG9yIDxwYWlyPGludCxwYWlyPGludCxpbnQ+Pj4gYTsgCiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IDM7IGkrKykgewogICAgICAgIGZvcihpbnQgaiA9IDE7IGogPD0gMzsgaisrKSB7CiAgICAgICAgICAgIGEucHVzaF9iYWNrKHt2W2ldW2pdLHtpLGp9fSk7CiAgICAgICAgfQogICAgfQogICAgaW50IGNudCA9IDA7CiAgICBmb3IoaW50IGkgPSAxOyBpIDwgOTsgaSsrKSB7CiAgICAgICAgaW50IHgxID0gYVtpXS5zZWNvbmQuZmlyc3QgLCB5MSA9IGFbaV0uc2Vjb25kLnNlY29uZDsKICAgICAgICBpbnQgeDIgPSBhW2krMV0uc2Vjb25kLmZpcnN0ICwgeTIgPSBhW2krMV0uc2Vjb25kLnNlY29uZDsKICAgICAgICBpZihhYnMoeDEteDIpID09IDEgb3IgYWJzKHkxLXkyKSA9PSAxKSBjbnQrKzsKICAgIH0KICAgIHJldHVybiBjbnQgPT0gODsKfQp2b2lkIGFuc3dlcigpIAp7ICAgCiAgICBzZXQgPGludD4gc3Q7IAogICAgdiA9IHZlY3RvciA8dmVjdG9yIDxpbnQ+PiAoNSwgdmVjdG9yIDxpbnQ+ICg1LDE1MCkpOwogICAgZm9yKGludCBpID0gMTsgaSA8PSAzOyBpKyspIHsKICAgICAgICBmb3IoaW50IGogPSAxOyBqIDw9IDM7IGorKykgewogICAgICAgICAgICBjaGFyIHg7ICBjaW4gPj4geDsKICAgICAgICAgICAgdltpXVtqXSA9IHggLSAnMCc7CiAgICAgICAgICAgIGlmKCF2W2ldW2pdKSBpZHgucHVzaF9iYWNrKHtpLGp9KTsKICAgICAgICAgICAgc3QuZW1wbGFjZSh2W2ldW2pdKTsKICAgICAgICB9CiAgICB9CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IDk7IGkrKykgewogICAgICAgIGlmKCFzdC5jb3VudChpKSkgbnVtLnB1c2hfYmFjayhpKTsKICAgIH0KICAgIGRvIHsKICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgaWR4LnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgIGludCB4ID0gaWR4W2ldLmZpcnN0ICwgeSA9IGlkeFtpXS5zZWNvbmQ7CiAgICAgICAgICAgIHZbeF1beV0gPSBudW1baV07CiAgICAgICAgfQogICAgICAgIGlmKHZhbGlkKCkpIHsKICAgICAgICAgICAgYW5zKys7IAogICAgICAgICAgICBmb3IoaW50IGkgPSAxOyBpIDw9IDM7IGkrKykgewogICAgICAgICAgICAgICAgZm9yKGludCBqID0gMTsgaiA8PSAzOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICBjb3V0IDw8IHZbaV1bal0gc3M7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb3V0IGVsIDsgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgY291dCBlbDsgCiAgICAgICAgfQogICAgfSB3aGlsZShuZXh0X3Blcm11dGF0aW9uKGFsbChudW0pKSk7CiAgICBjb3V0IDw8IGFuczsgCn0KaW50IEdhemEoKQp7ICAgWW91X3NzX2VmICAgCiAgICBJTygpOwogICAgaW50IFRDID0gMTsKICAgIC8vIGNpbiA+PiBUQzsKICAgIGRvIHsKICAgICAgICBhbnN3ZXIoKTsKICAgICAgICBUQy0tOwogICAgICAgIGlmIChUQykKICAgICAgICAgICAgY291dCBlbDsKICAgIH0gd2hpbGUgKFRDICE9IDApOwogICAgcmV0dXJuIDA7Cn0KCg==