#include #include #include #include #include #include using namespace std; int main(int argc, char** argv) { size_t cnt; while(cin >> cnt) { string str; vector vecStr; vector vecSetStr; for(size_t i = 0; i <= cnt; i ++) { set setStr; getline(cin,str); if(str.size() <= 1) continue; for(string::iterator it = str.begin(); it != str.end(); it ++) setStr.insert((*it)); vecStr.push_back(str); stringstream ss; for(auto & i : setStr) { ss << i; } vecSetStr.push_back(ss.str()); } for(size_t i = 0; i < vecSetStr.size(); i ++) { size_t cntShoda = 1; for(size_t j = i+1; j < vecSetStr.size(); j++) if(vecSetStr[i].compare(vecSetStr[j]) == 0) cntShoda ++; if(cntShoda == 1 && i+1 != vecSetStr.size()) // i == spatnej { //cout << "SPATNEJ JE: " << vecSetStr[i] << endl; char wrongChar = 0; int rightIdx = 0; for(size_t l = 0; l < vecSetStr[i].size();l++) // size obecnej { bool found = false; wrongChar = vecSetStr[i][l]; if(i+1 >= vecSetStr.size()) { rightIdx = i-1; for(size_t m = 0; m < vecSetStr[i].size();m++) { //cout << "1. Prochazime: vecSetStr[i] - " << vecSetStr[i][l] << endl; if(vecSetStr[i][l] == vecSetStr[i-1][m]) { found = true; break; } } if(!found) break; //cout << "WRONG CHAR " << wrongChar << endl; } else { rightIdx = i+1; for(size_t m = 0; m < vecSetStr[i].size();m++) { //cout << "2. Prochazime: vecSetStr[i] - " << vecSetStr[i][l] << endl; if(vecSetStr[i][l] == vecSetStr[i+1][m]) { found = true; break; } } if(!found) break; //cout << "WRONG CHAR " << wrongChar << endl; } } for(size_t p = 0; p < vecStr.size(); p ++) { setrightMnozina; setleftMnozina; for(size_t q = 0; q < vecSetStr[rightIdx].size(); q ++) rightMnozina.insert(vecSetStr[rightIdx][q]); for(size_t j = 0; j < vecSetStr[i].size(); j ++) { if(wrongChar == vecSetStr[i][j]) leftMnozina.insert('Z'+1); else leftMnozina.insert(vecSetStr[i][j]); } char blabla = 0; set::iterator it = rightMnozina.begin(); set::iterator it2 = leftMnozina.begin(); for(; it != rightMnozina.end(); ++it,++it2) { //cout << *it << " a " << *it2 << endl; if(*it != *it2) { //cout << *it << endl; blabla = *it; break; } } bool isSuccess = false; for(size_t o = 0; o < vecStr[p].size(); o++) { if(wrongChar == vecStr[p][o]) // spatnej znak { cout << i+1 << " " << o+1 << " " << blabla << endl; isSuccess = true; } } if(isSuccess) break; } } } } return 0; }