#include<stdio.h>
#include<string.h>
struct data{
	int x;
	int y;
};
int map[401][401];
struct data d[201];
int main(){
	int n,i,j,k;
	int s,t;
	int x_max=0,x_min=0,y_max=0,y_min=0;
	while(1){
		for(i=0;i<401;i++)for(j=0;j<401;j++)map[i][j]='.';
		for(i=0;i<201;i++){d[i].x=0;d[i].y=0;}
		x_max=0,x_min=0,y_max=0,y_min=0;
		scanf("%d",&n);
		if(!n)break;
		if(n==1)printf("1 1\n");
		else{
			d[0].x=0;
			d[0].y=0;
			map[200][200]='*';
			for(i=1;i<n;i++){
				scanf("%d %d",&s,&t);
				if(!(t%2)){
					if(t==0)d[i].x=-1;
					else d[i].x=1;
				}
				else{
					if(t==1)d[i].y=-1;
					else d[i].y=1;
				}
				d[i].x+=d[s].x;
				d[i].y+=d[s].y;
				if(x_max<d[i].x)x_max=d[i].x;
				if(x_min>d[i].x)x_min=d[i].x;
				if(y_max<d[i].y)y_max=d[i].y;
				if(y_min>d[i].y)y_min=d[i].y;
				map[d[i].y+200][d[i].x+200]='*';
			}
			printf("%d %d\n",x_max-x_min+1,y_max-y_min+1);
		}
	}
	return 0;
}