#include #include #include #include using namespace std; const int Nmax = 105; int i, n, j; bool dp[Nmax]; string s, a[Nmax], ans; struct Trie { Trie *son[26]; bool ap; Trie() { memset(son, 0, sizeof(son)); ap = 0; } void add(int pos, bool add) { if(pos == s.size()) { ap = add; return; } int ch = s[pos] - 'a'; if(!son[ch]) son[ch] = new Trie(); son[ch] -> add(pos+1, add); } void expand(int pos) { if(ap) dp[pos] = 1; if(pos == s.size()) return; int ch = s[pos] - 'a'; if(!son[ch]) return; son[ch] -> expand(pos+1); } } *root = new Trie(); int main() { // freopen("input", "r", stdin); cin.sync_with_stdio(false); cin >> n; for(i=1; i<=n; ++i) { cin >> a[i]; s = a[i]; root->add(0, 1); } for(i=1; i<=n; ++i) { s = a[i]; //cerr << s << '\n'; root->add(0, 0); memset(dp, 0, sizeof(dp)); dp[0] = 1; for(j=0; jexpand(j); if(dp[j] && ans.size() < s.size()) ans = s; root->add(0, 1); } if(ans.size() == 0) cout << -1 << '\n';else cout << ans << '\n'; return 0; }