#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; // using namespace __gnu_cxx; typedef long long ll; typedef double db; typedef vector vi; typedef vector vs; typedef pair pii; #define INF (1<<30) #define PB push_back #define FI first #define SE second #define REP(i,n) for(int (i)=0;(i)<(n);++(i)) #define FUP(i,a,b) for(int (i)=(a);(i)<=(b);++(i)) #define FDN(i,a,b) for(int (i)=(a);(i)>=(b);--(i)) char t[1001][1001]; vector > pos1; vector > pos2; bool cmp(pair a, pair b){ if(a.first != b.first) return a.second < b.second; else return a.first > b.first; } int make() { int n; scanf("%d", &n); if(!n) return 0; REP(i, n) REP(j, n) { char c; scanf(" %c", &c); if(c == 'O'){ pos1.PB(make_pair(i, j)); pos2.PB(make_pair(n-1-j, i)); } } REP(i, n) REP(j, n) { scanf(" %c", &t[i][j]); } sort(pos2.begin(), pos2.end()); /* REP(i, pos1.size()){ printf("(%d %d) ", pos1[i].first, pos1[i].second); } printf("\n"); REP(i, pos1.size()){ printf("(%d %d) ", pos2[i].first, pos2[i].second); } printf("\n"); */ REP(i, pos1.size()){ printf("%c", t[pos1[i].first][pos1[i].second]); } FDN(i, pos2.size()-1, 0) { printf("%c", t[n-1 - pos2[i].first][n-1 - pos2[i].second]); } FDN(i, pos1.size()-1, 0) { printf("%c", t[n-1 - pos1[i].first][n-1 - pos1[i].second]); } REP(i, pos2.size()){ printf("%c", t[pos2[i].first][pos2[i].second]); } printf("\n"); pos1.clear(); pos2.clear(); return 1; } int main(){ while(make()); return 0; }