/* */ //#pragma comment(linker, "/STACK:16777216") #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define y0 sdkfaslhagaklsldk #define y1 aasdfasdfasdf #define yn askfhwqriuperikldjk #define j1 assdgsdgasghsf #define tm sdfjahlfasfh #define lr asgasgash #define norm asdfasdgasdgsd #define eps 1e-9 #define M_PI 3.141592653589793 #define bs 1000000007 #define bsize 256 using namespace std; const int INF = 1e9; const int N = 200; string st; vector v; bool contains(string a, string b) { int ptr = 0; for (int i = 0; i < a.size(); i++) { if (ptr < b.size() && b[ptr] == a[i]) ++ptr; } return (ptr == b.size()); } bool check(string res, vector v) { for (int i = 0; i < v.size(); i++) { if (!contains(res, v[i])) return false; } return true; } bool cmp0(string&a, string&b) { if (a.size() != b.size()) return a.size() > b.size(); return a < b; } bool cmp1(string&a, string&b) { return a < b; } vector entries[N]; int sz; string solve(vector v, int cmp_flag) { if (cmp_flag == 0) sort(v.begin(), v.end(), cmp0); else random_shuffle(v.begin(), v.end()); /* for (int i = 0; i < v.size(); i++) { cout << v[i] << endl; } */ for (int i = 'a'; i <= 'z'; i++) { entries[i].clear(); } string res = ""; res = ""; sz = 0; for (int i = 0; i < v.size(); i++) { int ptr = -1; for (int j = 0; j < v[i].size(); j++) { int need = v[i][j]; int id = upper_bound(entries[need].begin(), entries[need].end(), ptr) - entries[need].begin(); if (id == entries[need].size()) { entries[need].push_back(sz); ptr = sz; ++sz; res += char(need); } else { ptr = entries[need][id]; } } } return res; } int used[1000]; string solve_smart(vector v) { string res; for (int i = 0;; i++) { for (int j = 0; j < 256; j++) { used[j] = 0; } int flag = 0; for (int j = 0; j < v.size(); j++) { if (v[j].size()>i) used[v[j][i]] = 1, flag = 1; } if (flag == 0) break; for (int j = 0; j < 256;j++) if (used[j]) res += char(j); } return res; } int main(){ //freopen("fabro.in","r",stdin); //freopen("fabro.out","w",stdout); //freopen("F:/in.txt", "r", stdin); //freopen("F:/output.txt", "w", stdout); ios_base::sync_with_stdio(0); //cin.tie(0); while (cin >> st) { if (st == ".") break; v.push_back(st); } string res = solve(v, 0); for (int iter = 1; iter <= 4; iter++) { string res2 = solve(v, 1); if (res2.size() < res.size()) res = res2; } string res2 = solve_smart(v); if (res2.size() < res.size()) res = res2; cout << res << endl; // cout << res.size() << " " << check(res, v) << endl; cin.get(); cin.get(); return 0; }