func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1010;   char s[100];   bool ops[256];   int relabel[N * 6];   int va[N * 6][2];   int typ[N * 6];   bool vis[N * 6], beres[N * 6];   string detail[N * 6];   map<string, int> ex;   map<pair<pair<int, int>, int>, int> rel;   vector<string> ans;   char usea;   int usev;   string nxtvar() {     while (true) {       string cur = string() + usea + to_string(usev);       if (!ex.count(cur)) {         ex.insert(make_pair(cur, 0));         return cur;       }       if (++usev == 1000) {         usev = 0;         ++usea;       }     }   }   int strcnt;   int gid(const string& str) {     auto it = ex.find(str);     if (it != ex.end()) return it->second;     ex.insert(make_pair(str, ++strcnt));     detail[strcnt] = str;     return strcnt;   }   int nid(const string& str) {     detail[++strcnt] = str;     return ex[str] = strcnt;   }   void dfs(int u) {     if (vis[u]) return;     vis[u] = true;     if (typ[u] == 0) {       relabel[u] = u;       return;     }     if (typ[u] == -1) {       if (beres[u]) {         if (typ[va[u][0]]) {           beres[va[u][0]] = true;         } else {           if (detail[va[u][0]] !=  res ) ans.push_back( res=  + detail[va[u][0]]);           return;         }       }       dfs(va[u][0]);       relabel[u] = relabel[va[u][0]];       return;     }     dfs(va[u][0]);     dfs(va[u][1]);     pair<pair<int, int>, int> spec(         make_pair(relabel[va[u][0]], relabel[va[u][1]]), typ[u]);     relabel[u] = u;     if (!rel.count(spec)) {       rel.insert(make_pair(spec, u));       detail[u] = nxtvar();       ans.push_back((beres[u] ? string( res ) : detail[u]) +  =  +                     detail[relabel[va[u][0]]] + char(typ[u]) +                     detail[relabel[va[u][1]]]);     } else       relabel[u] = rel[spec];   }   int main() {     usea =  a ;     usev = 0;     ops[ $ ] = true;     ops[ ^ ] = true;     ops[ # ] = true;     ops[ & ] = true;     int t;     scanf( %d , &t);     while (t--) {       scanf( %s , s);       char *p1 = s, *p2;       while (*p1 !=  = ) ++p1;       string a(s, p1);       p2 = p1;       while (!ops[*p2] && *p2) ++p2;       if (ops[*p2]) {         string b(p1 + 1, p2), c(p2 + 1);         int bi = gid(b), ci = gid(c);         int ai = nid(a);         typ[ai] = *p2;         va[ai][0] = bi;         va[ai][1] = ci;       } else {         string b(p1 + 1);         int bi = gid(b);         int ai = nid(a);         typ[ai] = -1;         va[ai][0] = bi;       }     }     int resi = gid( res );     beres[resi] = true;     dfs(resi);     printf( %lu n , ans.size());     for (auto str : ans) puts(str.c_str());     return 0;   }   