#include <iostream>
#include <cstdio>
#include <vector>
#include <map>
#define max 110
using namespace std;
struct E {
int left;
int right;
} nodes[max];
map<int, vector<int> > M;
vector<int> vecPool[max];
int vecIdx = 0;
void levelOrder(int p, int deep) {
if (p == 0) return;
if (M.find(deep) == M.end()) M[deep] = vecPool[vecIdx++];
M[deep].push_back(p);
levelOrder(nodes[p].left, deep + 1);
levelOrder(nodes[p].right, deep + 1);
}
int main(int argc, char** argv) {
int t;
scanf("%d", &t);
for (int j = 1; j <= t; ++j) {
int n, m;
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; ++i) {
nodes[i].left = nodes[i].right = 0;
vecPool[i].clear();
}
M.clear();
vecIdx = 0;
while (n--) {
int a, b;
scanf("%d%d", &a, &b);
if (nodes[b].left == 0) nodes[b].left = a;
else nodes[b].right = a;
}
levelOrder(1, 1);
printf("Q%d:\n", j);
for (map<int, vector<int> >::iterator itor = M.begin(); itor != M.end(); ++itor) {
for (int i = 0; i < itor->second.size() - 1; ++i) {
printf("%d ", itor->second[i]);
}
printf("%d\n", itor->second[itor->second.size() - 1]);
}
}
return 0;
}
//2
//4 5
//2 1
//3 1
//4 2
//5 4
//1 2
//2 1
//Q1:
//1
//2 3
//4
//5
//Q2:
//1
//2
// EXAMPLE DESIGNED TO TEST
//1
//10 11
//2 1
//4 1
//6 2
//10 2
//5 10
//7 10
//3 4
//9 3
//8 3
//11 9
转自http://www.cnblogs.com/jackloverose/archive/2013/02/18/2916272.html:非递归
#include <stdio.h>
#include <stdlib.h>
int main()
{
#define SIZE 101
int t;
int bitree[SIZE];
bitree[1]=1;
scanf("%d",&t);
int q=1;
while(t>0)
{
int n,m,child,father,i,j;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
{
scanf("%d%d",&child,&father);
bitree[child]=bitree[father]+1;
}
j=1;
printf("Q%d:\n",q);
q++;
for(i=1;i<=m;i++)
{
if(bitree[i]>j)
{
printf("\n%d ",i);
j++;
}
else
printf("%d ",i);
}
printf("\b\n");
t--;
}
return 0;
}