Language: C++

#include <iostream>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <cmath>
#include <string>
#include <sstream>
#include <iomanip>
#include <complex>
using namespace std;

#define ll long long
#define vvi vector< vector<int> >
#define vi vector<int>
#define All(X) X.begin(),X.end()
#define FOR(i,a,b) for(int i=(int)(a);i<(int)(b);i++)
#define REP(i,n) for(int i=0;i<(int)(n);i++)
#define pb push_back
#define pii pair<int,int>
#define mp make_pair
#define pi 3.14159265359
#define shosu(X) fixed << setprecision(X)
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b){return a/gcd(a,b)*b;}

struct Dice{
  int t, r, f;
  int top() { return t; }
  int bottom() { return 7 - t; }
  int right() { return r; }
  int left() { return 7 - r; }
  int front() { return f; }
  int back() { return 7 - f; }
  void toFront() { swap(f, t); t = 7 - t; }
  void toBack() { toFront(); toFront(); toFront(); }
  void toRight() { swap(t, r); t = 7 - t; }
  void toLeft() { toRight(); toRight(); toRight(); }
  void toClock() { swap(f, r); r = 7 - r; }
  void toConter() { toClock(); toClock(); toClock(); }
  int roll(int tt, int ff) {
    REP(i,30) {
      if (i % 10 == 0) toRight();
      else if (i % 10 == 5) toFront();
      else toClock();
      if (tt == t && ff == f) return r;
    }
    return 0;
  }
};

void mydebug(){
	REP(j,256){
		REP(k,256){
			if(topmap[j][k]!=0) cout << "(" << j << "," << k << ")" <<topmap[j][k] << "(high:" << high[j][k] << ") " ;
		}
	}
	cout << endl;
}

bool movalble(int face) {return (face==4||face==5||face==6);};
int high[256][256];
int topmap[256][256];
int ans[6];
int main(){
	int n;
	while(cin >> n,n){
		REP(i,256) REP(j,256) { high[i][j] = 0; topmap[i][j] = 0;}
		REP(i,6) ans[i] = 0;
		REP(i,n){
			Dice d;
			d.t = 1; d.f = 3; d.r = 5;
			int t,f;
			cin >> t >> f;
			d.roll(t,f);
			int x = 128, y = 128;
			int nowhigh = high[x][y];
			bool isstop = false;
			for(;isstop==false;){
				int dir = 0;
				isstop = true;
				if(movalble(d.front())&&high[x-1][y]<nowhigh) dir = max(dir,d.front());
				if(movalble(d.back())&&high[x+1][y]<nowhigh) dir = max(dir,d.back());
				if(movalble(d.right())&&high[x][y+1]<nowhigh) dir = max(dir,d.right());
				if(movalble(d.left())&&high[x][y-1]<nowhigh) dir = max(dir,d.left());
				if(dir!=0&&dir==d.front()){
					x--; d.toFront(); isstop = false; nowhigh = high[x-1][y];
					continue;
				}
				if(dir!=0&&dir==d.back()){
					x++; d.toBack(); isstop = false; nowhigh = high[x+1][y];
					continue;
				}
				if(dir!=0&&dir==d.right()){
					y++; d.toRight(); isstop = false; nowhigh = high[x][y+1];
					continue;
				}
				if(dir!=0&&dir==d.left()){
					y--; d.toLeft(); isstop = false; nowhigh = high[x][y-1];
					continue;
				}
			}
			high[x][y]++;
			if(topmap[x][y]!=0){
				if(ans[topmap[x][y]-1]!=0){
					ans[topmap[x][y]-1]--;
				}
			}
			topmap[x][y] = d.top();
			ans[d.top()-1]++;
			//mydebug();
		}
		REP(i,6){
			cout << ans[i];
			if(i!=5) cout << " ";
			else cout << endl;
		}
	}
}

Compiler output:
a.cc: In function 'void mydebug()':
a.cc:56:28: error: 'topmap' was not declared in this scope
   56 |                         if(topmap[j][k]!=0) cout << "(" << j << "," << k << ")" <<topmap[j][k] << "(high:" << high[j][k] << ") " ;
      |                            ^~~~~~
a.cc:56:111: error: 'high' was not declared in this scope
   56 |                         if(topmap[j][k]!=0) cout << "(" << j << "," << k << ")" <<topmap[j][k] << "(high:" << high[j][k] << ") " ;
      |                                                                                                               ^~~~