#include #include #include using namespace std; struct st{ int x; int y; }; int cmp(const void * a, const void * b){ if( (*(st*)a) .x < (*(st*)b) .x) return -1; if( (*(st*)a) .x > (*(st*)b) .x) return 1; if( (*(st*)a) .y < (*(st*)b) .y) return -1; if( (*(st*)a) .y > (*(st*)b) .y) return 1; return 0; } int main () { int size; char sign; char ** matrix; int it = 0; int itmax; int temp; st * elem; //char test[4]; int idx = 0; while(1){ scanf("%d", &size); if(size == 0) return 0; while(getchar()!='\n'); elem = new st[size*size]; matrix = new char*[size]; for(int k = 0; k < size; k++) matrix[k] = new char[size]; for(int i = 0; i < size; i++){ for(int j = 0; j < size; j++){ sign = getchar(); // test[idx++] = sign; if(sign == '0'){ elem[it].x = i; elem[it++].y = j; //cout << x[it-1] << " " << y[it-1] << endl; } } while(getchar()!='\n'); //for(idx=0;idx<4;idx++) printf("%c",test[idx]);printf("\n"); idx=0; } for(int i = 0; i < size; i++){ for(int j = 0; j < size; j++){ scanf("%c", &matrix[i][j]); } getchar(); } itmax = it; for(int k = 0; k < 4; k++){ it = 0; for(int i = 0; i < itmax; i++){ printf("%c", matrix[elem[it].x][elem[it++].y]); } for(int k = 0; k < itmax; k++){ temp = elem[k].x; elem[k].x = elem[k].y; elem[k].y = size - 1 - temp; } qsort((void *) elem, itmax, sizeof(st), cmp); } cout << endl; for(int i = 0; i < size; i++) delete [] matrix[i]; delete [] matrix; delete [] elem; it = 0; } return 0; }