#include #include #include using namespace std; struct Room; Room* table[100]; vector input; vector::iterator in; int room_cnt; struct Room { int depth; int id; int num; vector child; vector conn; Room(int door, int dep, int parent) { depth = dep; id = ++room_cnt; num = door; table[depth] = this; if(parent > 0) conn.push_back(parent); while((int)conn.size() < num) { int v = *in++; if(v > 0) { Room* r = new Room(v, depth+1, id); conn.push_back(r->id); child.push_back(r); } else { Room* r = table[depth + v]; conn.push_back(r->id); r->conn.push_back(id); } } } ~Room() { for(int i = 0; i < (int)child.size(); ++i) delete child[i]; } void Print() { sort(conn.begin(), conn.end()); cout << id; for(int i = 0; i < (int)conn.size(); ++i) cout << " " << conn[i]; cout << endl; for(int i = 0; i < (int)child.size(); ++i) child[i]->Print(); } }; int main() { int nnn; cin >> nnn; while(nnn--) { input.clear(); room_cnt = 0; while(true) { int v; cin >> v; input.push_back(v); if(v == 0) break; } in = input.begin(); Room* root = new Room(*in++, 0, -1); root->Print(); delete root; } }