#include<stdio.h>
#include<algorithm>
using namespace std;
int h[100][100];
int t[100][100];
int c[6][4]={{4,2,3,5},{1,3,6,4},{5,6,2,1},{6,2,1,5},{3,6,4,1},{5,4,2,3}};
int d[6][4]={{5,4,2,3},{3,6,4,1},{6,2,1,5},{5,6,2,1},{1,3,6,4},{4,2,3,5}};
struct dice{
	int U,D,F,B,L,R;
	dice(int a,int b){
		U=a;
		F=b;
		D=7-a;
		B=7-b;
		for(int i=0;i<6;i++)
			for(int j=0;j<4;j++)if(a==c[i][j]&&b==d[i][j])L=i+1;
		R=7-L;
	}
};

void N(dice &a){
	int q=a.U;a.U=a.F;a.F=a.D;a.D=a.B;a.B=q;
}
void E(dice &a){
	int q=a.U;a.U=a.L;a.L=a.D;a.D=a.R;a.R=q;
}
void W(dice &a){
	int q=a.U;a.U=a.R;a.R=a.D;a.D=a.L;a.L=q;
}
void S(dice &a){
	int q=a.U;a.U=a.B;a.B=a.D;a.D=a.F;a.F=q;
}
int main(){
	int a;
	while(scanf("%d",&a),a){
		for(int i=0;i<100;i++)
			for(int j=0;j<100;j++)
				h[i][j]=t[i][j]=0;
		for(int i=0;i<a;i++){
			int x,y;
			scanf("%d%d",&x,&y);
			dice s=dice(x,y);
			int row=50;
			int col=50;
			bool ok=false;
			do{
				ok=false;
				for(int j=6;j>=4&&!ok;j--){
					if(h[row][col]>h[row-1][col]&&s.B==j){
						row--;
						N(s);
						ok=true;
					}else if(h[row][col]>h[row+1][col]&&s.F==j){
						row++;
						S(s);ok=true;
					}else if(h[row][col]>h[row][col-1]&&s.L==j){
						col--;
						W(s);ok=true;
					}else if(h[row][col]>h[row][col+1]&&s.R==j){
						col++;
						E(s);ok=true;
					}
				}
			}while(ok);
			h[row][col]++;
			t[row][col]=s.U;
		}
		for(int i=1;i<=6;i++){
			int ret=0;
			for(int j=0;j<100;j++)
				for(int k=0;k<100;k++)if(t[j][k]==i)ret++;
			printf("%d",ret);
			if(i<6)printf(" ");
			else printf("\n");
		}
	}
}