http://code.bupt.edu.cn/problem/p/100/
#include<stdio.h>
using namespace std;
struct pp
{
int data;
int level;
};
int main()
{
int T;
while(scanf("%d",&T)!=EOF)
for(int tt=1;tt<=T;tt++)
{
int n,m;
scanf("%d %d",&n,&m);
pp * s;
s=new pp[m+1];
s[1].data=1;
s[1].level=1;
int k=2;
int max=1;
for(int i=1;i<=n;i++)
{
int a,b;
scanf("%d %d",&a,&b);
s[k].data=a;
s[k].level=s[b].level+1;
if(s[k].level>max)
max=s[k].level;
k++;
}
printf("Q%d:\n",tt);
for(int j=1;j<=max;j++)
{
int flag=0;
for(int i=1;i<=m;i++)
{
if(s[i].level==j&&flag==0)
{
flag=1;
printf("%d",s[i].data);
}
else if(s[i].level==j&&flag!=0)
printf(" %d",s[i].data);
else
;
}
printf("\n");
}
}
return 0;
}