class Node
{
public:
    Node(const int &_item):item(_item){}
	Node(const vector<int> &_itemset):itemset(_itemset){}
//private:
	int item;
	vector<int> itemset;
	map<int, shared_ptr<Node>, item_cmp> children;
	map<int, double, item_cmp> util_list;
};

class AM_Tree
{
public:
    AM_Tree(const vector<int> &itemset){
		root = make_shared<Node>(itemset);
	}
	void insert(const map<int, double, item_cmp> &);
	void printIUTable()
	void printNode(const shared_ptr<Node> &ptr)
	void printHeaderTable()
//private:
	map< vector<int>, IUPair, item_cmp> IUTable;
	map<int, list<shared_ptr<Node>>, item_cmp> HeaderTable;
	shared_ptr<Node> root;
};