func_code_string: #include <bits/stdc++.h>   using namespace std;   struct Widget {     string type, name;     vector<Widget *> childs;     long long h, w, s, b;     Widget(string _name =   , string _type =   , long long _h = -1,            long long _w = -1) {       h = _h, w = _w;       type = _type;       name = _name;       s = 0;       b = 0;     }     void pack(Widget *W) { childs.push_back(W); }     long long getW() {       if (type ==  normal )         return w;       else if (type ==  VBox ) {         if (childs.size() == 0) return 0;         if (w != -1) return w;         w = 0;         for (int i = 0; i < childs.size(); ++i) w = max(w, childs[i]->getW());         return w = w + 2 * b;       } else {         if (childs.size() == 0) return 0;         if (w != -1) return w;         w = 0;         for (int i = 0; i < childs.size(); ++i) w += childs[i]->getW();         return w = w + 2 * b + s * max(0LL, (long long)childs.size() - 1);       }     }     long long getH() {       if (type ==  normal )         return h;       else if (type ==  HBox ) {         if (childs.size() == 0) return 0;         if (h != -1) return h;         h = 0;         for (int i = 0; i < childs.size(); ++i) h = max(h, childs[i]->getH());         return h = h + 2 * b;       } else {         if (childs.size() == 0) return 0;         if (h != -1) return h;         h = 0;         for (int i = 0; i < childs.size(); ++i) h += childs[i]->getH();         return h = h + 2 * b + s * max(0LL, (long long)childs.size() - 1);       }     }   };   map<string, Widget> M;   int main() {     int N;     cin >> N;     for (int i = 0; i < N; ++i) {       string com;       cin >> com;       if (com ==  Widget ) {         string name;         cin >> name;         int p1 = name.find( ( );         int p2 = name.find( , );         int p3 = name.find( ) );         string rname = name.substr(0, p1);         string val1 = name.substr(p1 + 1, p2 - p1 - 1);         string val2 = name.substr(p2 + 1, p3 - p2 - 1);         int h, w;         sscanf((val1 +     + val2).c_str(),  %d %d , &w, &h);         M[rname] = Widget(name,  normal , h, w);       } else if (com ==  VBox  || com ==  HBox ) {         string name;         cin >> name;         M[name] = Widget(name, com);       } else {         string name, method, val;         int p1 = com.find( . );         int p2 = com.find( ( );         int p3 = com.find( ) );         name = com.substr(0, p1);         method = com.substr(p1 + 1, p2 - p1 - 1);         val = com.substr(p2 + 1, p3 - p2 - 1);         if (method ==  pack ) {           M[name].pack(&M[val]);         } else {           int n;           sscanf(val.c_str(),  %d , &n);           if (method ==  set_spacing )             M[name].s = n;           else             M[name].b = n;         }       }     }     for (map<string, Widget>::iterator it = M.begin(); it != M.end(); ++it)       cout << (it->first) <<     << (it->second.getW()) <<                << (it->second.getH()) << endl;   }   