func_code_string: #include <bits/stdc++.h>   using namespace std;   map<string, int> m1;   map<int, string> m2;   pair<long long, long long> r[128];   long long H[128], V[128], B[128], S[128];   vector<int> g1[128], g2[128];   int G[128];   int main() {     memset(H, 0, sizeof H);     memset(V, 0, sizeof V);     memset(G, 0, sizeof G);     memset(B, 0, sizeof B);     memset(S, 0, sizeof S);     int N;     cin >> N;     string s;     getline(cin, s);     while (N--) {       getline(cin, s);       istringstream sin(s);       string s2;       sin >> s2;       if (s2 ==  Widget ) {         string name;         sin >> name;         name = name.substr(0, name.find( ( ) + 1);         istringstream sin2(s.substr(s.find( ( ) + 1));         int t1, t2;         char c;         sin2 >> t1 >> c >> t2;         name = name.substr(0, name.size() - 1);         int id = m1.size();         m1[name] = id;         m2[id] = name;         r[id] = make_pair(t1, t2);       } else if (s2 ==  VBox ) {         string name;         sin >> name;         int id = m1.size();         m1[name] = id;         m2[id] = name;         V[id] = 1;       } else if (s2 ==  HBox ) {         string name;         sin >> name;         int id = m1.size();         m1[name] = id;         m2[id] = name;         H[id] = 1;       } else if (s.find( set_border ) != string::npos) {         string name = s.substr(0, s.find( . ));         int id = m1[name];         istringstream sin2(s.substr(s.find( ( ) + 1));         int sz;         sin2 >> sz;         B[id] = sz;       } else if (s.find( set_spacing ) != string::npos) {         string name = s.substr(0, s.find( . ));         int id = m1[name];         istringstream sin2(s.substr(s.find( ( ) + 1));         int sz;         sin2 >> sz;         S[id] = sz;       } else if (s.find( pack ) != string::npos) {         string name1 = s.substr(0, s.find( . ));         string name2 = s.substr(s.find( ( ) + 1);         name2 = name2.substr(0, name2.size() - 1);         int id1 = m1[name1], id2 = m1[name2];         g1[id1].push_back(id2);         G[id1]++;         g2[id2].push_back(id1);       }     }     int left = m1.size();     int done[128];     memset(done, 0, sizeof done);     N = m1.size();     while (left) {       int cur = -1;       for (int i = 0; i < (N); i++)         if (done[i] == 0 && G[i] == 0) {           cur = i;         }       done[cur] = 1;       for (int i = 0; i < (g2[cur].size()); i++) G[g2[cur][i]]--;       left--;       long long x = 0, y = 0;       if (V[cur] && g1[cur].size()) {         for (int i = 0; i < (g1[cur].size()); i++) {           x = max(x, r[g1[cur][i]].first);           y += r[g1[cur][i]].second;         }         x += 2 * B[cur];         y += 2 * B[cur];         y += (g1[cur].size() - 1) * S[cur];         r[cur] = make_pair(x, y);       }       if (H[cur] && g1[cur].size()) {         for (int i = 0; i < (g1[cur].size()); i++) {           y = max(y, r[g1[cur][i]].second);           x += r[g1[cur][i]].first;         }         x += 2 * B[cur];         y += 2 * B[cur];         x += (g1[cur].size() - 1) * S[cur];         r[cur] = make_pair(x, y);       }     }     for (typeof(m1.begin()) it = m1.begin(); it != m1.end(); it++) {       cout << it->first <<     << r[it->second].first <<                << r[it->second].second << endl;     }     return 0;   }   