#include<bits/stdc++.h>
using namespace std;
#define FOR(i,a,b) for (int i=(a);i<(b);i++)
#define RFOR(i,a,b) for (int i=(b)-1;i>=(a);i--)
#define REP(i,n) for (int i=0;i<(n);i++)
#define RREP(i,n) for (int i=(n)-1;i>=0;i--)
typedef long long LL;
int N;
int d[301][301];
int now[301][301];
int dice[6];
int make_dice(int t,int f){
	dice[0]=t;
	dice[1]=f;
	if(t==1&&f==3){
		dice[2]=5;
	}
	if(t==4&&f==1){
		dice[2]=5;
	}
	if(t==6&&f==4){
		dice[2]=5;
	}
	if(t==3&&f==6){
		dice[2]=5;
	}
	
	if(t==3&&f==1){
		dice[2]=2;
	}
	if(t==1&&f==4){
		dice[2]=2;
	}
	if(t==4&&f==6){
		dice[2]=2;
	}
	if(t==6&&f==3){
		dice[2]=2;
	}
	
	if(t==1&&f==5){
		dice[2]=4;
	}
	if(t==2&&f==1){
		dice[2]=4;
	}
	if(t==6&&f==2){
		dice[2]=4;
	}
	if(t==5&&f==6){
		dice[2]=4;
	}
	
	if(t==5&&f==1){
		dice[2]=3;
	}
	if(t==1&&f==2){
		dice[2]=3;
	}
	if(t==2&&f==6){
		dice[2]=3;
	}
	if(t==6&&f==5){
		dice[2]=3;
	}
	
	if(t==3&&f==5){
		dice[2]=1;
	}
	if(t==5&&f==4){
		dice[2]=1;
	}
	if(t==4&&f==2){
		dice[2]=1;
	}
	if(t==2&&f==3){
		dice[2]=1;
	}
	
	if(t==5&&f==3){
		dice[2]=6;
	}
	if(t==4&&f==5){
		dice[2]=6;
	}
	if(t==2&&f==4){
		dice[2]=6;
	}
	if(t==3&&f==2){
		dice[2]=6;
	}
	dice[3]=6-dice[0]+1;
	dice[4]=6-dice[1]+1;
	dice[5]=6-dice[2]+1;
}

int rotate_down(){
	int a=dice[0];
	int b=dice[1];
	int c=dice[3];
	int d=dice[4];
	dice[0]=d;
	dice[1]=a;
	dice[3]=b;
	dice[4]=c;
}

int rotate_up(){
	int a=dice[0];
	int b=dice[1];
	int c=dice[3];
	int d=dice[4];
	dice[4]=a;
	dice[0]=b;
	dice[1]=c;
	dice[3]=d;
}

int rotate_right(){
	int a=dice[0];
	int b=dice[2];
	int c=dice[3];
	int d=dice[5];
	dice[0]=b;
	dice[2]=c;
	dice[3]=d;
	dice[5]=a;
}

int rotate_left(){
	int a=dice[0];
	int b=dice[2];
	int c=dice[3];
	int d=dice[5];
	dice[0]=d;
	dice[2]=a;
	dice[3]=b;
	dice[5]=c;
}

int rotate(int x,int y){
	/*cout<<"dice";
	REP(i,6){
		cout<<dice[i]<<" ";
	}
	cout<<endl;*/
	//6を探す
	int now2=0;
	REP(i,6){
		if(dice[i]==6){
			now2=i;
			break;
		}
	}
	if(now2==1&&d[x][y]>d[x][y+1]){
		rotate_down();
		rotate(x,y+1);
		return 0;
	}
	if(now2==4&&d[x][y]>d[x][y-1]){
		rotate_up();
		rotate(x,y-1);
		return 0;
	}
	if(now2==2&&d[x][y]>d[x+1][y]){
		rotate_left();
		rotate(x+1,y);
		return 0;
	}
	if(now2==5&&d[x][y]>d[x-1][y]){
		rotate_right();
		rotate(x-1,y);
		return 0;
	}
	//5を探す
	REP(i,6){
		if(dice[i]==5){
			now2=i;
			break;
		}
	}
	if(now2==1&&d[x][y]>d[x][y+1]){
		rotate_down();
		rotate(x,y+1);
		return 0;
	}
	if(now2==4&&d[x][y]>d[x][y-1]){
		rotate_up();
		rotate(x,y-1);
		return 0;
	}
	if(now2==2&&d[x][y]>d[x+1][y]){
		rotate_left();
		rotate(x+1,y);
		return 0;
	}
	if(now2==5&&d[x][y]>d[x-1][y]){
		rotate_right();
		rotate(x-1,y);
		return 0;
	}
	//4を探す
	REP(i,6){
		if(dice[i]==4){
			now2=i;
			break;
		}
	}
	if(now2==1&&d[x][y]>d[x][y+1]){
		rotate_down();
		rotate(x,y+1);
		return 0;
	}
	if(now2==4&&d[x][y]>d[x][y-1]){
		rotate_up();
		rotate(x,y-1);
		return 0;
	}
	if(now2==2&&d[x][y]>d[x+1][y]){
		rotate_left();
		rotate(x+1,y);
		return 0;
	}
	if(now2==5&&d[x][y]>d[x-1][y]){
		rotate_right();
		rotate(x-1,y);
		return 0;
	}
	
	
	
	d[x][y]++;
	now[x][y]=dice[0];
	return 0;
}

void push(int t,int f){
	make_dice(t,f);
	rotate(150,150);
}

int ans[6];
int main(){
	while(cin>>N){
		if(N==0)break;
		REP(i,301){
			REP(j,301){
				d[i][j]=0;
				now[i][j]=0;
			}
		}
		REP(i,6){
			ans[i]=0;
			dice[i]=0;
		}
		REP(i,N){
			int t,f;
			cin>>t>>f;
			push(t,f);
		}
		REP(i,301){
			REP(j,301){
				if(now[i][j]!=0){
					ans[now[i][j]-1]++;
					//cout<<i-150<<" "<<j-150<<" "<<now[i][j]<<" "<<d[i][j]<<endl;
				}
			}
		}
		REP(i,6){
			cout<<ans[i];
			if(i!=5){
				cout<<" ";
			}else{
				cout<<endl;
			}
		}
	}
}


Measured memory_bytes: 3796