#include<iostream>
#include<iomanip>
#include<math.h>
#include<algorithm>
#include<string>
#include<vector>
#include<queue>
#include<stack>
#include<set>
#include<map>
#define REP(i, N) for(ll i = 0; i < N; ++i)
#define FOR(i, a, b) for(ll i = a; i < b; ++i)
#define ALL(a) (a).begin(),(a).end()
#define pb push_back
#define INF 1000000000
#define MOD 1000000007
using namespace std;
typedef long long ll;
typedef pair<ll, ll> P;
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};

vector<vector<ll> > h(301, vector<ll>(301, 0));
vector<vector<ll> > t(301, vector<ll>(301, 0));

void dfs(P roc, ll top, ll face) {
	ll nh, nw;
	switch(top) {
		case 1: {
			switch(face) {
				case 2: {
					nh = roc.first - 1;
					nw = roc.second;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 2, 6);
						return;
					}
					nh = roc.first;
					nw = roc.second - 1;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 3, 2);
						return;
					}
					++h[roc.first][roc.second];
					t[roc.first][roc.second] = top;
					return;
				}
				case 3: {
					nh = roc.first;
					nw = roc.second + 1;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 2, 3);
						return;
					}
					nh = roc.first - 1;
					nw = roc.second;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 3, 6);
						return;
					}
					++h[roc.first][roc.second];
					t[roc.first][roc.second] = top;
					return;
				}
				case 4: {
					nh = roc.first;
					nw = roc.second - 1;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 2, 4);
						return;
					}
					nh = roc.first + 1;
					nw = roc.second;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 3, 1);
						return;
					}
					++h[roc.first][roc.second];
					t[roc.first][roc.second] = top;
					return;
				}
				case 5: {
					nh = roc.first + 1;
					nw = roc.second;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 2, 1);
						return;
					}
					nh = roc.first;
					nw = roc.second + 1;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 3, 5);
						return;
					}
					++h[roc.first][roc.second];
					t[roc.first][roc.second] = top;
					return;
				}
			}
		}
		case 2: {
			switch(face) {
				case 1: {
					nh = roc.first - 1;
					nw = roc.second;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 1, 5);
						return;
					}
					nh = roc.first;
					nw = roc.second + 1;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 3, 1);
						return;
					}
					++h[roc.first][roc.second];
					t[roc.first][roc.second] = top;
					return;
				}
				case 3: {
					nh = roc.first;
					nw = roc.second - 1;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 1, 3);
						return;
					}
					nh = roc.first - 1;
					nw = roc.second;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 3, 5);
						return;
					}
					++h[roc.first][roc.second];
					t[roc.first][roc.second] = top;
					return;
				}
				case 4: {
					nh = roc.first;
					nw = roc.second + 1;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 1, 4);
						return;
					}
					nh = roc.first + 1;
					nw = roc.second;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 3, 2);
						return;
					}
					++h[roc.first][roc.second];
					t[roc.first][roc.second] = top;
					return;
				}
				case 6: {
					nh = roc.first + 1;
					nw = roc.second;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 1, 2);
						return;
					}
					nh = roc.first;
					nw = roc.second - 1;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 3, 6);
						return;
					}
					++h[roc.first][roc.second];
					t[roc.first][roc.second] = top;
					return;
				}
			}
		}
		case 3: {
			switch(face) {
				case 2: {
					nh = roc.first;
					nw = roc.second + 1;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 1, 2);
						return;
					}
					nh = roc.first - 1;
					nw = roc.second;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 2, 4);
						return;
					}
					++h[roc.first][roc.second];
					t[roc.first][roc.second] = top;
					return;
				}
				case 1: {
					nh = roc.first - 1;
					nw = roc.second;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 1, 4);
						return;
					}
					nh = roc.first;
					nw = roc.second - 1;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 2, 1);
						return;
					}
					++h[roc.first][roc.second];
					t[roc.first][roc.second] = top;
					return;
				}
				case 5: {
					nh = roc.first;
					nw = roc.second - 1;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 1, 5);
						return;
					}
					nh = roc.first + 1;
					nw = roc.second;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 2, 3);
						return;
					}
					++h[roc.first][roc.second];
					t[roc.first][roc.second] = top;
					return;
				}
				case 6: {
					nh = roc.first + 1;
					nw = roc.second;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 1, 3);
						return;
					}
					nh = roc.first;
					nw = roc.second + 1;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 2, 6);
						return;
					}
					++h[roc.first][roc.second];
					t[roc.first][roc.second] = top;
					return;
				}
			}
		}
		case 4: {
			switch(face) {
				case 1: {
					nh = roc.first - 1;
					nw = roc.second;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 1, 3);
						return;
					}
					nh = roc.first;
					nw = roc.second + 1;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 2, 1);
						return;
					}
					++h[roc.first][roc.second];
					t[roc.first][roc.second] = top;
					return;
				}
				case 2: {
					nh = roc.first;
					nw = roc.second - 1;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 1, 2);
						return;
					}
					nh = roc.first - 1;
					nw = roc.second;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 2, 3);
						return;
					}
					++h[roc.first][roc.second];
					t[roc.first][roc.second] = top;
					return;
				}
				case 5: {
					nh = roc.first;
					nw = roc.second + 1;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 1, 5);
						return;
					}
					nh = roc.first + 1;
					nw = roc.second;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 2, 4);
						return;
					}
					++h[roc.first][roc.second];
					t[roc.first][roc.second] = top;
					return;
				}
				case 6: {
					nh = roc.first + 1;
					nw = roc.second;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 1, 4);
						return;
					}
					nh = roc.first;
					nw = roc.second - 1;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 2, 6);
						return;
					}
					++h[roc.first][roc.second];
					t[roc.first][roc.second] = top;
					return;
				}
			}
		}
		case 5: {
			switch(face) {
				case 1: {
					nh = roc.first - 1;
					nw = roc.second;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 1, 2);
						return;
					}
					nh = roc.first;
					nw = roc.second - 1;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 3, 1);
						return;
					}
					++h[roc.first][roc.second];
					t[roc.first][roc.second] = top;
					return;
				}
				case 3: {
					nh = roc.first;
					nw = roc.second + 1;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 1, 3);
						return;
					}
					nh = roc.first - 1;
					nw = roc.second;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 3, 2);
						return;
					}
					++h[roc.first][roc.second];
					t[roc.first][roc.second] = top;
					return;
				}
				case 4: {
					nh = roc.first;
					nw = roc.second - 1;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 1, 4);
						return;
					}
					nh = roc.first + 1;
					nw = roc.second;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 3, 5);
						return;
					}
					++h[roc.first][roc.second];
					t[roc.first][roc.second] = top;
					return;
				}
				case 6: {
					nh = roc.first + 1;
					nw = roc.second;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 1, 5);
						return;
					}
					nh = roc.first;
					nw = roc.second + 1;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 3, 6);
						return;
					}
					++h[roc.first][roc.second];
					t[roc.first][roc.second] = top;
					return;
				}
			}
		}
		case 6: {
			switch(face) {
				case 2: {
					nh = roc.first - 1;
					nw = roc.second;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 2, 1);
						return;
					}
					nh = roc.first;
					nw = roc.second + 1;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 3, 2);
						return;
					}
					++h[roc.first][roc.second];
					t[roc.first][roc.second] = top;
					return;
				}
				case 3: {
					nh = roc.first;
					nw = roc.second - 1;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 2, 3);
						return;
					}
					nh = roc.first - 1;
					nw = roc.second;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 3, 1);
						return;
					}
					++h[roc.first][roc.second];
					t[roc.first][roc.second] = top;
					return;
				}
				case 4: {
					nh = roc.first;
					nw = roc.second + 1;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 2, 4);
						return;
					}
					nh = roc.first + 1;
					nw = roc.second;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 3, 6);
						return;
					}
					++h[roc.first][roc.second];
					t[roc.first][roc.second] = top;
					return;
				}
				case 5: {
					nh = roc.first + 1;
					nw = roc.second;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 2, 6);
						return;
					}
					nh = roc.first;
					nw = roc.second - 1;
					if(h[nh][nw] < h[roc.first][roc.second]) {
						dfs(P(nh, nw), 3, 5);
						return;
					}
					++h[roc.first][roc.second];
					t[roc.first][roc.second] = top;
					return;
				}
			}
		}
	}
}

int main(void) {
	while(true) {
		int n;
		cin>>n;
		if(n == 0) break;
		REP(i, 301) {
			REP(j, 301) {
				h[i][j] = 0;
				t[i][j] = 0;
			}
		}
		REP(i, n) {
			ll top, face;
			cin>>top>>face;
			dfs(P(100, 100), top, face);
		}
		vector<int> cnt(7, 0);
		REP(i, 301) {
			REP(j, 301) {
				++cnt[t[i][j]];
			}
		}
		FOR(i, 1, 7) {
			cout<<cnt[i];
			if(i != 6) cout<<" ";
			else cout<<endl;
		}
	}
}

Measured memory_bytes: 3924