#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#define Max(a,b) (((a)>(b))?(a):(b))
#define Min(a,b) (((a)<(b))?(a):(b))
#define L(i,j,k) for(int i=(j);i<=(k);i++)
#define R(i,j,k) for(int i=(j);i>=(k);i--)
using namespace std;
const int Mxn=1e5+100;
const int Mxm=1e7+100;
const int Maxr=1e7+100;
const int Dayy400=97*366+(400-97)*365;
const int Dayy4=365*3+366;
const int sq1582=(31+28+31+30+31+30+31+31+30+31+4);
int q,Day=1,Month=1,Year=-1e9;
int jd=1,jm=1,jy=-4712;
bool isBC=false;
int Months[13]= {0,31,29,31,30,31,30,31,31,30,31,30,31};
int D400[401]= {0};
int cy[Maxr+10],cm[Maxr+10],cd[Maxr+10];
bool isry(int y) {
if(y>1582) {
if((y%400==0)||(y%4==0&&y%100!=0))return true;
} else if(y<1582) {
if(y%4==0)return true;
}
return false;
}
void mysolve() {
int ty=jy;
int tm=1;
int td=1;
int m=1;
int Dayy=Dayy400;
L(i,1,Maxr) {
td++;
//if(i==x+1)break;
if(ty==1582&&tm==10&&td==5) {
td=15;
} else if(tm==12) {
if(td==Months[tm]+1) {
ty++;
td=1;
tm=1;
if(isry(ty))Months[2]=29;
else Months[2]=28;
}
} else if(td==Months[tm]+1) {
td=1;
tm++;
}
cy[i]=ty;
cm[i]=tm;
cd[i]=td;
}
}
int main() {
scanf("%d",&q);
mysolve();
L(i,1,q) {
Day=1;
Month=1;
Year=-1e9;
//Months[2]=28;
isBC=false;
int r;
scanf("%d",&r);
if(cy[r]<=0)isBC=true;
if(isBC)printf("%d %d %d BC\n",cd[r],cm[r],-1*(cy[r]-1));
else printf("%d %d %d\n",cd[r],cm[r],cy[r]);
}
return 0;
}
理论能过80的,求调,玄关