func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxm = 1000000 + 5;   const int maxn = 6400 + 5;   struct Edge {     int to, next;   } edges[maxm];   int indices[maxn];   int deg[maxn];   char ans[maxm];   int an;   int over;   inline int Trans_index(char* s) { return (s[0] -  0 ) * 80 + (s[1] -  0 ); }   void DFS(int x) {     while (indices[x] != -1) {       int y = edges[indices[x]].to;       indices[x] = edges[indices[x]].next;       DFS(y);     }     ans[an++] = x / 80 +  0 ;   }   int main() {     int n;     scanf( %d n , &n);     memset(indices, 0xff, sizeof(indices));     int start;     for (int i = 0; i < n; i++) {       char line[5];       gets(line);       int x = start = Trans_index(line);       edges[i].to = Trans_index(line + 1);       ;       edges[i].next = indices[x];       indices[x] = i;       deg[edges[i].to]++;       deg[x]--;     }     int cnt_err = 0;     over = -1;     for (int i = 0; i < maxn; i++) {       if (deg[i] == 0)         continue;       else if (deg[i] < 0)         start = i, cnt_err -= deg[i];       else         over = i, cnt_err += deg[i];     }     if (cnt_err != 0 && cnt_err != 2) {       puts( NO );       return 0;     }     DFS(start);     for (int i = 0; i < maxn; i++) {       if (indices[i] != -1) {         printf( NO );         return 0;       }     }     puts( YES );     reverse(ans, ans + an);     if (cnt_err == 0) over = start;     ans[an++] =  0  + over % 80;     ans[an++] =   0 ;     puts(ans);     return 0;   }   