#include <memory>
#include <string>
#include <vector>
class node {
public:
node(const std::string &name = "");
virtual ~node();
std::string get_name() const;
void set_name(const std::string new_name);
unsigned int get_nr_children() const;
node *get_child(std::size_t i) const;
void add_child(node *child);
private:
std::string name;
std::vector<node *> children;
static unsigned int node_id;
};