func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 105;   int n;   string s[MAXN];   string ans =   ;   vector<int> g[MAXN];   bool has[MAXN];   bool used[MAXN];   vector<int> tp;   void dfs(int v) {     used[v] = true;     for (int i = 0; i < g[v].size(); i++) {       int to = g[v][i];       if (!used[to]) dfs(to);     }     tp.push_back(v);   }   void dfs2(int v) {     used[v] = true;     ans.append(1, (char)( a  + v));     for (int i = 0; i < (int)g[v].size(); i++) {       int to = g[v][i];       if (!used[to]) dfs2(to);     }   }   int main() {     scanf( %d n , &n);     for (int i = 1; i <= n; i++) {       getline(cin, s[i]);     }     for (int i = 1; i <= n; i++) {       for (int j = 0; j < s[i].length(); j++) {         has[s[i][j] -  a ] = true;         if (j + 1 < s[i].length()) {           int from = s[i][j] -  a ;           int to = s[i][j + 1] -  a ;           g[from].push_back(to);         }       }     }     for (int i = 0; i < 26; i++) {       if (has[i] && !used[i]) {         dfs(i);       }     }     reverse(tp.begin(), tp.end());     memset(used, false, sizeof(used));     for (int i = 0; i < (int)tp.size(); i++) {       int cur = tp[i];       if (!used[cur]) dfs2(cur);     }     cout << ans << endl;     return 0;   }   