#include <stdio.h>
#include <string.h>
#include <math.h>

int a[410][410],b[410][410];
int xmax,ymax,xmin,ymin;

void init();
void serch(int x,int y);

int main(){
	int N;
	int n,d;
	int i,j,k,l,m,c;
	int x,y;
	while(1){
		scanf("%d",&N);
		if(N==0)break;
		x=200;
		y=200;
		init();
		a[x][y]=0;
		for(i=1; i<N; i++){
			scanf("%d %d",&n,&d);
			c=1;
			for(j=0; j<410; j++){
				for(k=0; k<410; k++){
					if(a[j][k]==n){
						if(d==0)a[j-1][k]=i;
						if(d==1)a[j][k-1]=i;
						if(d==2)a[j+1][k]=i;
						if(d==3)a[j][k+1]=i;
						c=0;
						break;
					}
				}
				if(!c)break;
			}
		}
		serch(x,y);
		printf("%d %d\n",xmax-xmin+1,ymax-ymin+1);
		//printf("xmax:%d xmin:%d ymax:%d ymin%d\n",xmax,xmin,ymax,ymin);
	}
	return 0;
}


void init(){
	int i,j;
	for(i=0; i<410; i++){
		for(j=0; j<410; j++){
			a[i][j]=-1;
			b[i][j]=0;
			xmax=200;
			xmin=200;
			ymax=200;
			ymin=200;
		}
	}
}

void serch(int x,int y){
	if(a[x][y]<0||b[x][y]==1)return;
	b[x][y]=1;
	if(x>xmax)xmax=x;
	if(x<xmin)xmin=x;
	if(ymax<y)ymax=y;
	if(ymin>y)ymin=y;

	//printf("x:%d y:%d xmax:%d ymax:%d\n",x,y,xmax,ymax);

	if(x-1>=0)serch(x-1,y);
	if(y-1>=0)serch(x,y-1);
	if(x+1<410)serch(x+1,y);
	if(y+1<410)serch(x,y+1);
}