#include "bits/stdc++.h"
using namespace std;
typedef long long ll;

deque<int> height[250][250];//それぞれの高さと最上部のダイスのインデックス
int sokumen[][4]={{-1,-1,-1,-1},{2,3,5,4},{1,4,6,3},{1,2,6,5},{1,5,6,2},{1,3,6,4},{2,4,5,3}};//topが決まっているときの側面のパターン（反時計回り）
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};

class dice
{
	public:
	int top;
	int frontid;//frontの面のindex
	int x,y;//座標
	dice(int t,int f)
	{
		top=t;
		for(int i=0;i<4;i++)
		{
			if(sokumen[top][i]==f)
				frontid=i;
		}
		x=125;
		y=125;
	}

	//転がったときにダイスがどうなるか
	//frontから反時計回り
	int rotate(int muki)
	{
		int rotid=(frontid+muki+4)%4;//転がる方向の面（転がった後に下に来るやつ）
		int front=sokumen[top][frontid];
		if(sokumen[top][rotid]<4)
			return -1;//転がることができない
		if(muki==0)
			front=top;
		else if(muki==2)
			front=7-top;
		top=7-sokumen[top][rotid];//topは転がる方向の裏

		//frontidを求める
		for(int i=0;i<4;i++)
		{
			if(sokumen[top][i]==front)
				frontid=i;
		}
		x+=dx[muki];
		y+=dy[muki];
		return top;
	}
};
vector<dice> d;

//(125,125)の最上部にあるサイコロを転がせる限界まで転がす
void korokoro(int di)
{
	int x=125;
	int y=125;
	bool f[4];//方向を調べる
	while(1)
	{
		//cerr<<height[x][y].size()<<endl;
		//高さ条件を見る
		fill(f,f+4,false);
		for(int i=0;i<4;i++)
		{
			if((int)height[x][y].size()-(int)height[x+dx[i]][y+dy[i]].size()>=2)
				f[i]=true;
			else
				f[i]=false;
		}
		int muki=-1;
		int me=-1;
		//高さ条件が合致している中で最大のダイスの目を見る
		for(int i=0;i<4;i++)
		{
			if(f[i] && me<sokumen[d[di].top][(d[di].frontid+i+4)%4])
			{
				me=sokumen[d[di].top][(d[di].frontid+i+4)%4];
				muki=i;
			}
		}
		//目が3以下なら終わり
		//cerr<<d[di].top<<" "<<me<<" "<<muki<<endl;
		if(me<=3)
			break;
		//それ以外なら転がす
		d[di].rotate(muki);
		height[x][y].pop_front();
		x=d[di].x;
		y=d[di].y;
		height[x][y].push_front(di);
	}
}

int main()
{
	while(1)
	{
		int n;
		int ans[6];
		fill(ans,ans+6,0);
		cin>>n;
		if(n==0)
			break;
		for(int i=0;i<250;i++)
		{
			for(int j=0;j<250;j++)
				height[i][j].clear();
		}
		d.clear();
		//(100,100が原点)
		for(int i=0;i<n;i++)
		{
			int t,f;
			cin>>t>>f;
			d.push_back(dice(t,f));
			height[125][125].push_front(i);
			korokoro(height[125][125][0]);

		}
		
		//すべてのマスについて見る
		for(int i=0;i<250;i++)
		{
			for(int j=0;j<250;j++)
			{
				if(!height[i][j].empty())
				{
					//cerr<<i<<" "<<j<<" "<<height[i][j].size()<<" "<<d[height[i][j][0]].top<<endl;
					ans[d[height[i][j][0]].top-1]++;
				}
			}
		}

		for(int i=0;i<6;i++)
		{
			cout<<ans[i];
			if(i!=5)
				cout<<" ";
		}
		cout<<endl;
	}
	return 0;
}
