#include #include #include #include using namespace std; typedef long long ll; void findWrong(char* row, int n, int & j, char wrong) { for ( int i = 0 ; i < n; i++ ) { if ( row[i] == wrong ) { j = i; return; } } } char getChar(ll n) { for ( int i = 0; n != 0; n >>= 1, i++) { if ( n & 1 ) return i+65; } return -1; } void read_matrix(char **matrix, int number){ map > rows; for (int i = 0; i < number ; ++i){ ll num = 0; for (int j = 0; j < number ; ++j){ char c; cin >> c; matrix[i][j] = c; num |= 1 << (c-65); } rows[num].insert(i); } int row = 0, col = 0; ll both = 0, wrong = 0, right = 0; for(map >::iterator it=rows.begin(); it!=rows.end(); it++) { both ^= it->first; if ( it->second.size() == 1 ) { wrong = it->first; row = *(it->second.begin()); } else { right = it->first; } } map > cols; for (int i = 0; i < number ; ++i){ ll num = 0; for (int j = 0; j < number ; ++j){ char c = matrix[j][i]; num |= 1 << (c-65); } cols[num].insert(i); } for(map >::iterator it=cols.begin(); it!=cols.end(); it++) { if ( it->second.size() == 1 ) { col = *(it->second.begin()); break; } } char r = getChar(both&right); if ( r == -1 ) r = getChar(both&wrong); /*int row = *(rows[wrong].begin()), col = 0; findWrong(matrix[row], number, col, w);*/ cout << row+1 << " " << col+1 << " " << r << endl; } int main(int argc, char** argv) { int number; while (cin >> number){ char **matrix = new char*[number]; for (int i = 0; i < number; ++i) matrix[i] = new char[number]; read_matrix(matrix, number); for ( int i = 0 ; i < number; i++ ) { delete[] matrix[i]; } delete[] matrix; } return 0; }