#include #include #include #include using namespace std; int n; char **grill; struct Bod { int x; int y; Bod(int x, int y) { this->x = x; this->y = y; } }; bool comparator(const Bod &a, const Bod &b) { return ((((a.x*n+a.y)-(b.x*n+b.y)) < 0) ? true : false); } void transformuj(vector &diry) { static int temp; for(int i = 0, im = diry.size(); i < im; i++) { temp = diry[i].x; diry[i].x = diry[i].y; diry[i].y = n-temp-1; } } int main() { vector diry; grill = new char*[1000]; for(int i = 0; i < 1000; i++) grill[i] = new char[1000]; char c; // while(1) { cin >> n; if(n == 0) break; diry.clear(); for(int x = 0; x < n; x++) { for(int y = 0; y < n; y++) { cin >> c; if(c == 'O') diry.push_back(Bod(x, y)); } } for(int x = 0; x < n; x++) { for(int y = 0; y < n; y++) { cin >> grill[x][y]; } } // vypis for(int d = 0, dm = diry.size(); d < dm; d++) cout << grill[diry[d].x][diry[d].y]; // transformuj(diry); sort(diry.begin(), diry.end(), comparator); for(int d = 0, dm = diry.size(); d < dm; d++) cout << grill[diry[d].x][diry[d].y]; // transformuj(diry); sort(diry.begin(), diry.end(), comparator); for(int d = 0, dm = diry.size(); d < dm; d++) cout << grill[diry[d].x][diry[d].y]; // transformuj(diry); sort(diry.begin(), diry.end(), comparator); for(int d = 0, dm = diry.size(); d < dm; d++) cout << grill[diry[d].x][diry[d].y]; cout << '\n'; // } return 0; }