/* @JUDGE_ID: 32472GK 1069 C++ */ #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef int vert; typedef vector edges; typedef vector graph; struct node { int parent; int id; int nchild; vector child; node(int id = -1) : id(id), parent(-1), nchild(0) {} }; void solve(vector& code) { int N = code.back(); vector node_map(N + 1); priority_queue, greater > leaf; for(int i = 1; i <= N; i++) node_map[i].id = i; for(int i = 0; i < code.size(); i++) node_map[code[i]].nchild++; for(int i = 1; i < N; i++) if(! node_map[i].nchild) leaf.push(i); for(int i = 0; i < code.size(); i++) { const int parent = code[i]; //cout << parent << endl; assert(! leaf.empty()); const int child = leaf.top(); leaf.pop(); node_map[parent].child.push_back(child); node_map[child].parent = parent; if(! --node_map[parent].nchild) leaf.push(parent); } for(int i = 1; i <= N; i++) { vector adj; if(node_map[i].parent >= 1) adj.push_back(node_map[i].parent); const vector& nodes = node_map[i].child; adj.insert(adj.end(), nodes.begin(), nodes.end()); sort(adj.begin(), adj.end()); cout << i << ":"; for(int j = 0; j < adj.size(); j++) cout << ' ' << adj[j]; cout << endl; } } int main() { vector seq; int i; while(cin >> i) { seq.push_back(i); } solve(seq); return 0; }