func_code_string: #include <bits/stdc++.h>   struct Widget {     std::string name;     long long width, height;     Widget(const std::string& name, long long width, long long height)         : name(name), width(width), height(height) {}     ~Widget() {}     virtual void calculateSize() {}   };   struct Box : public Widget {     int spacing, border;     std::vector<Widget*> children;     Box(const std::string& name) : Widget(name, 0, 0), spacing(0), border(0) {}   };   struct HBox : public Box {     HBox(const std::string& name) : Box(name) {}     virtual void calculateSize() {       if (children.empty()) {         width = 0;         height = 0;         return;       }       if (width == 0 && height == 0) {         for (std::vector<Widget*>::iterator i = children.begin();              i != children.end(); ++i) {           (*i)->calculateSize();           width += (*i)->width;           height = std::max(height, (*i)->height);         }         width += (children.size() - 1) * spacing + 2 * border;         height += 2 * border;       }     }   };   struct VBox : public Box {     VBox(const std::string& name) : Box(name) {}     virtual void calculateSize() {       if (children.empty()) {         width = 0;         height = 0;         return;       }       if (width == 0 && height == 0) {         for (std::vector<Widget*>::iterator i = children.begin();              i != children.end(); ++i) {           (*i)->calculateSize();           width = std::max(width, (*i)->width);           height += (*i)->height;         }         height += (children.size() - 1) * spacing + 2 * border;         width += 2 * border;       }     }   };   int main() {     int n;     std::cin >> n;     std::map<std::string, Widget*> map;     for (int i = 0; i < n; ++i) {       std::string s;       std::cin >> s;       if (s ==  Widget ) {         std::cin >> s;         std::string::size_type lparen = s.find( ( );         std::string name = s.substr(0, lparen);         std::string::size_type comma = s.find( , , lparen + 1);         std::string::size_type rparen = s.find( ) , comma + 1);         int width =             strtol(s.substr(lparen + 1, comma - lparen - 1).c_str(), 0, 10);         int height =             strtol(s.substr(comma + 1, rparen - comma - 1).c_str(), 0, 10);         map[name] = new Widget(name, width, height);       } else if (s ==  VBox ) {         std::cin >> s;         map[s] = new VBox(s);       } else if (s ==  HBox ) {         std::cin >> s;         map[s] = new HBox(s);       } else {         std::string::size_type dot = s.find( . );         std::string::size_type lparen = s.find( ( , dot + 1);         std::string::size_type rparen = s.find( ) , lparen + 1);         std::string name = s.substr(0, dot);         std::string method = s.substr(dot + 1, lparen - dot - 1);         if (method ==  pack ) {           std::string child = s.substr(lparen + 1, rparen - lparen - 1);           static_cast<Box*>(map[name])->children.push_back(map[child]);         } else if (method ==  set_border ) {           int border =               strtol(s.substr(lparen + 1, rparen - lparen - 1).c_str(), 0, 10);           static_cast<Box*>(map[name])->border = border;         } else if (method ==  set_spacing ) {           int spacing =               strtol(s.substr(lparen + 1, rparen - lparen - 1).c_str(), 0, 10);           static_cast<Box*>(map[name])->spacing = spacing;         }       }     }     for (std::map<std::string, Widget*>::iterator i = map.begin(); i != map.end();          ++i) {       Widget* widget = (*i).second;       widget->calculateSize();       std::cout << widget->name <<     << widget->width <<     << widget->height                 << std::endl;     }   }   