#include #include #include #include #include #include #include #include #include using namespace std; #define REP(i,a,b) for (int i = (a); i <= (b); ++i) #define FORI(i,n) REP(i,1,n) #define FOR(i,n) REP(i,0,int(n)-1) #define mp make_pair #define pb push_back #define pii pair #define vi vector #define ll long long #define SZ(x) ((int)(x.size())) #define IN(x,y) ((y).find((x)) != (y).end()) #define DBG(v) cerr << #v << " = " << (v) << endl; #define FOREACH(i,t) for (typeof (t.begin()) i = t.begin(); i != t.end(); i++) #define fi first #define ALL(v) v.begin(),v.end() #define se second char g[1111][1111]; char t[1111][1111]; vi h[2][1111]; int main () { while(1) { int n;scanf("%d",&n); if (!n) break; FOR(i,n) scanf("%s",g[i]); FOR(i,n) scanf("%s",t[i]); FOR(i,n) FOR(j,2) h[j][i].clear(); FOR(i,n) FOR(j,n) if (g[i][j]=='0') h[0][i].pb(j); FOR(d,4) { //DBG(d); //DBG(n); int n1=d%2,n2=(d+1)%2; FOR(i,n) h[n2][i].clear(); FOR(i,n) FOR(j,SZ(h[n1][i])) printf("%c",t[i][h[n1][i][j]]); FOR(i,n) FOR(j,SZ(h[n1][i])) h[n2][h[n1][i][j]].pb(n-1-i); FOR(i,n) sort(ALL(h[n2][i])); } puts(""); } // return 0; }