#include <iostream>
#include <sstream>
#include <string>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cassert>

using namespace std;

#define FOR(i,k,n) for(int i=(k); i<(int)(n); ++i)
#define REP(i,n) FOR(i,0,n)
#define FORIT(i,c) for(__typeof((c).begin())i=(c).begin();i!=(c).end();++i)

template<class T> void debug(T begin, T end){ for(T i = begin; i != end; ++i) cerr<<*i<<" "; cerr<<endl; }
inline bool valid(int x, int y, int W, int H){ return (x >= 0 && y >= 0 && x < W && y < H); }

typedef long long ll;
const int INF = 100000000;
const double EPS = 1e-8;
const int MOD = 1000000007;
int dx[8] = {1, 0, -1, 0, 1, -1, -1, 1};
int dy[8] = {0, 1, 0, -1, 1, 1, -1, -1};
void roll(int dice[], int a, int b, int c, int d){
  int tmp = dice[a];
  dice[a] = dice[b];
  dice[b] = dice[c];
  dice[c] = dice[d];
  dice[d] = tmp;
}
void roll_x(int dice[]){
  roll(dice, 0, 1, 5, 4);
}
void roll_y(int dice[]){
  roll(dice, 0, 2, 5, 3);
}
void roll_z(int dice[]){
  roll(dice, 1, 2, 4, 3);
}
void get_dice(int dice[], int top, int front){
  REP(i, 6) dice[i] = i + 1;
  for(int i = 0; i < 6; i++){
    if(i % 2) roll_x(dice);
    else roll_y(dice);
    for(int j = 0; j < 4; j++){
      roll_z(dice);
      if(dice[0] == top && dice[1] == front) return;
    }
  }
}

int main(){
  int N;
  int tr[4] = {2, 1, 3, 4};
  while(cin>>N && N){
    int h[200][200] = {};
    int d[200][200] = {};
    REP(i, N){
      int t, f;
      cin>>t>>f;
      int dice[6];
      get_dice(dice, t, f);
      int x = 100, y = 100;
      while(true){
        int nr = -1;
        REP(r, 4){
          if(h[y + dy[r]][x + dx[r]] < h[y][x] && dice[tr[r]] >= 4 && (nr == -1 || dice[tr[nr]] < dice[tr[r]])){
            nr = r;
          }
        }
        if(nr == -1) break;
        x += dx[nr];
        y += dy[nr];
        if(nr == 3) roll_x(dice);
        if(nr == 2) roll_y(dice);
        if(nr == 0) REP(i, 3) roll_y(dice);
        if(nr == 1) REP(i, 3) roll_x(dice);
      }
      h[y][x]++;
      d[y][x] = dice[0];
    }
    int ans[6] = {};
    REP(y, 200)REP(x, 200) if(d[y][x] > 0) ans[d[y][x] - 1]++;
    REP(i, 6){
      cout<<ans[i];
      if(i == 5) cout<<endl;
      else cout<<" ";
    }
  }
  return 0;
}