#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <random>
using namespace std;
#define REP(i,a,b) for(int i=a;i<b;++i)
#define rep(i,n) REP(i,0,n)
typedef long long ll;
const int n=500;
char A[n+32][n+32],B[n+32][n+32];
#define a(r, c) A[r+9][c+9]
#define b(r, c) B[r+9][c+9]
mt19937 engine;
uniform_int_distribution<> rnd(0, n-1);
ll p[1024];
ll points[11];
int v[3][9]={
{2, 0, 1, 5, 3, 4, 8, 6, 7},
{1, 2, 0, 4, 5, 3, 7, 8, 6},
{0, 1, 2, 3, 4, 5, 6, 7, 8},
};
ll checkRow(int r, int c)
{
ll res=0; rep(i, 9) res|=1<<a(r, c+i); return p[res];
}
ll checkCol(int r, int c)
{
ll res=0; rep(i, 9) res|=1<<a(r+i, c); return p[res];
}
ll check3x3(int r, int c)
{
ll res=0; rep(i, 3) rep(j, 3) res|=1<<a(r+i, c+j); return p[res];
}
ll calcScore(int r, int c)
{
ll res=0;
rep(i, 9) res+=checkRow(r, c-i);
rep(i, 9) res+=checkCol(r-i, c);
rep(i, 3) rep(j, 3) res+=check3x3(r-i, c-j);
return res;
}
int main(int argc, char**argv)
{
clock_t start=clock();
points[1]=1; REP(i, 2, 10) points[i]=points[i-1]*45+1;
//REP(i, 1, 9) points[i]=0; points[9]=1;
rep(i, 1<<10) p[i]=points[__builtin_popcount(i)];
rep(i, n) {
string s; cin>>s;
rep(j, n) {
a(i, j)=(s[j]=='0') ? (v[i%9/3][j%9]+3*i)%9+1 : s[j]-'0';
b(i, j)=s[j]-'0';
}
}
int timelimit=atof(argv[1])*CLOCKS_PER_SEC;
int cnt=0;
while (true) {
int r, c;
do {
//r=(rand()>>10)%n; c=(rand()>>10)%n;
r=rnd(engine), c=rnd(engine);
} while (b(r, c));
ll score=calcScore(r, c);
int t=a(r, c);
int maxx=t;
REP(x, 1, 10) if (x!=t) {
a(r, c)=x;
ll s=calcScore(r, c);
if (score <= s) { maxx=x; score=s; }
}
a(r, c)=maxx;
cnt++;
if (cnt%(1<<12)==0) if (clock()-start >= timelimit) break;
}
cerr<<cnt<<endl;
rep(i, n) rep(j, n) if (b(i, j) && (b(i, j) != a(i, j))) {
cerr<<"INVALID"<<endl;
return 1;
}
rep(i, n) { rep(j, n) cout<<(int)a(i, j); cout<<endl; }
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPGN0aW1lPgojaW5jbHVkZSA8cmFuZG9tPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIFJFUChpLGEsYikgZm9yKGludCBpPWE7aTxiOysraSkKI2RlZmluZSByZXAoaSxuKSBSRVAoaSwwLG4pCnR5cGVkZWYgbG9uZyBsb25nIGxsOwoKY29uc3QgaW50IG49NTAwOwpjaGFyIEFbbiszMl1bbiszMl0sQltuKzMyXVtuKzMyXTsKI2RlZmluZSBhKHIsIGMpIEFbcis5XVtjKzldCiNkZWZpbmUgYihyLCBjKSBCW3IrOV1bYys5XQoKbXQxOTkzNyBlbmdpbmU7CnVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjw+IHJuZCgwLCBuLTEpOwpsbCBwWzEwMjRdOwpsbCBwb2ludHNbMTFdOwppbnQgdlszXVs5XT17CiAgICB7MiwgMCwgMSwgNSwgMywgNCwgOCwgNiwgN30sCiAgICB7MSwgMiwgMCwgNCwgNSwgMywgNywgOCwgNn0sCiAgICB7MCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOH0sCn07CmxsIGNoZWNrUm93KGludCByLCBpbnQgYykKewogICAgbGwgcmVzPTA7IHJlcChpLCA5KSByZXN8PTE8PGEociwgYytpKTsgcmV0dXJuIHBbcmVzXTsKfQpsbCBjaGVja0NvbChpbnQgciwgaW50IGMpCnsKICAgIGxsIHJlcz0wOyByZXAoaSwgOSkgcmVzfD0xPDxhKHIraSwgYyk7IHJldHVybiBwW3Jlc107Cn0KbGwgY2hlY2szeDMoaW50IHIsIGludCBjKQp7CiAgICBsbCByZXM9MDsgcmVwKGksIDMpIHJlcChqLCAzKSByZXN8PTE8PGEocitpLCBjK2opOyByZXR1cm4gcFtyZXNdOwp9CmxsIGNhbGNTY29yZShpbnQgciwgaW50IGMpCnsKICAgIGxsIHJlcz0wOwogICAgcmVwKGksIDkpIHJlcys9Y2hlY2tSb3cociwgYy1pKTsKICAgIHJlcChpLCA5KSByZXMrPWNoZWNrQ29sKHItaSwgYyk7CiAgICByZXAoaSwgMykgcmVwKGosIDMpIHJlcys9Y2hlY2szeDMoci1pLCBjLWopOwogICAgcmV0dXJuIHJlczsKfQppbnQgbWFpbihpbnQgYXJnYywgY2hhcioqYXJndikKewogICAgY2xvY2tfdCBzdGFydD1jbG9jaygpOwogICAgcG9pbnRzWzFdPTE7IFJFUChpLCAyLCAxMCkgcG9pbnRzW2ldPXBvaW50c1tpLTFdKjQ1KzE7CiAgICAvL1JFUChpLCAxLCA5KSBwb2ludHNbaV09MDsgcG9pbnRzWzldPTE7CiAgICByZXAoaSwgMTw8MTApIHBbaV09cG9pbnRzW19fYnVpbHRpbl9wb3Bjb3VudChpKV07CgogICAgcmVwKGksIG4pIHsKICAgICAgICBzdHJpbmcgczsgY2luPj5zOwogICAgICAgIHJlcChqLCBuKSB7CiAgICAgICAgICAgIGEoaSwgaik9KHNbal09PScwJykgPyAodltpJTkvM11baiU5XSszKmkpJTkrMSA6IHNbal0tJzAnOwogICAgICAgICAgICBiKGksIGopPXNbal0tJzAnOwogICAgICAgIH0KICAgIH0KCiAgICBpbnQgdGltZWxpbWl0PWF0b2YoYXJndlsxXSkqQ0xPQ0tTX1BFUl9TRUM7CiAgICBpbnQgY250PTA7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGludCByLCBjOwogICAgICAgIGRvIHsKICAgICAgICAgICAgLy9yPShyYW5kKCk+PjEwKSVuOyBjPShyYW5kKCk+PjEwKSVuOwogICAgICAgICAgICByPXJuZChlbmdpbmUpLCBjPXJuZChlbmdpbmUpOwogICAgICAgIH0gd2hpbGUgKGIociwgYykpOwoKICAgICAgICBsbCBzY29yZT1jYWxjU2NvcmUociwgYyk7CiAgICAgICAgaW50IHQ9YShyLCBjKTsKICAgICAgICBpbnQgbWF4eD10OwogICAgICAgIFJFUCh4LCAxLCAxMCkgaWYgKHghPXQpIHsKICAgICAgICAgICAgYShyLCBjKT14OwogICAgICAgICAgICBsbCBzPWNhbGNTY29yZShyLCBjKTsKICAgICAgICAgICAgaWYgKHNjb3JlIDw9IHMpIHsgbWF4eD14OyBzY29yZT1zOyB9CiAgICAgICAgfQogICAgICAgIGEociwgYyk9bWF4eDsKICAgICAgICBjbnQrKzsKICAgICAgICBpZiAoY250JSgxPDwxMik9PTApIGlmIChjbG9jaygpLXN0YXJ0ID49IHRpbWVsaW1pdCkgYnJlYWs7CiAgICB9CgogICAgY2Vycjw8Y250PDxlbmRsOwogICAgcmVwKGksIG4pIHJlcChqLCBuKSBpZiAoYihpLCBqKSAmJiAoYihpLCBqKSAhPSBhKGksIGopKSkgewogICAgICAgIGNlcnI8PCJJTlZBTElEIjw8ZW5kbDsKICAgICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJlcChpLCBuKSB7IHJlcChqLCBuKSBjb3V0PDwoaW50KWEoaSwgaik7IGNvdXQ8PGVuZGw7IH0KCiAgICByZXR1cm4gMDsKfQ==