#include #include #include #include #include #include using namespace std; class MNOZINA { public: MNOZINA(const int & idx,string def) :m_Idx(idx),m_Default(def){ for(string::iterator it = def.begin(); it != def.end(); it ++) m_Mnozina.insert((*it)); for(const auto & i: m_Mnozina) m_Set+= i; } int m_Idx; string m_Set; string m_Default; setm_Mnozina; friend bool operator < (MNOZINA x, MNOZINA y) { return x.m_Idx < y.m_Idx; } }; int main(int argc, char** argv) { size_t cnt; while(cin >> cnt) { vector strs; set tmpSet; string str; //---------------------------------------- NACITANI for(size_t i = 0; i <= cnt; i ++) { getline(cin,str); if(str.size() <= 1) continue; strs.push_back(MNOZINA(i,str)); } //----------------------------------------- for(size_t i = 0; i < strs.size(); i ++) { size_t cntShoda = 1; for(size_t j = i+1; j < strs.size(); j ++) if(strs[i].m_Set.compare(strs[j].m_Set) == 0) cntShoda ++; size_t rightIdx = (i+1 >= strs.size() ? i-1 : i+1); if(cntShoda == 1 && i+1 != strs.size()) { size_t wrongChar = 0; for(size_t l = 0; l < strs[i].m_Set.size(); l ++) { wrongChar = l; size_t m = 0; for(; m < strs[i].m_Set.size(); m++) if(strs[i].m_Set[l] == strs[rightIdx].m_Set[m]) break; if(m == strs[i].m_Set.size()) break; } set::iterator it = strs[rightIdx].m_Mnozina.begin(); for(; it != strs[rightIdx].m_Mnozina.end(); it ++) { if(strs[i].m_Mnozina.count(*it) == 0) { cout << strs[i].m_Idx << " " << wrongChar+1 << " " << *it << endl; break; } } if(it != strs[rightIdx].m_Mnozina.end()) break; } } } return 0; }