#include #include #include #include #include #include #include #define TRADEMARKS 4000 #define STRLEN 200 using namespace std; vector pole; vector common; int trademarks; int min1, min1pos, min2, min2pos; bool unique(string substring) { vector::iterator iter; for (iter = common.begin(); iter != common.end(); iter++) { if ((*iter).compare(substring) == 0) { return false; } } return true; } void solve() { min1 = pole[min1pos].length(); min2 = pole[min2pos].length(); for (int len = min1; len > 0; len--) { for (int x = 0; x <= min1 - len; x++) { string substring; substring = pole[min1pos].substr(x, len); if (pole[min2pos].find(substring) != string::npos) { if (unique(substring)) { common.push_back(substring); } } } } unsigned int index = 0; while ((index < common.size()) ) { unsigned int tr = 0; bool deleted = false; while ((tr < pole.size())&& (common.size() > 0)) { if (pole[tr].find(common[index]) == string::npos) { common.erase(common.begin() + index); deleted = true; } tr++; } if (!deleted) index++; } string min = ""; for (unsigned int i = 0; i < common.size(); i++) { if (common[i].length() > min.length()) { min = common[i]; } else { if (common[i].length() == min.length()) { if (min.compare(common[i]) > 0) { min = common[i]; } } } } if (common.size() == 0) { cout << "IDENTITY LOST" << endl; } else { cout << min << endl; } } int main(void) { scanf("%d", &trademarks); while (trademarks > 0) { pole.clear(); common.clear(); string a; int len; for (int i = 0; i < trademarks; i++) { cin >> a; pole.push_back(a); len = a.length(); min1pos = 0; min2pos = 0; min1 = 201; min2 = 201; if ( (len < min1)) { min2 = min1; min2pos = min1pos; min1pos = i; min1 = len; } else if (len <= min2) { min2pos = i; min2 = len; } } solve(); scanf("%d", &trademarks); } return 0; }