rt.
#include<cstdio>
using namespace std;
#define int long long
int q,n,year,month,day;
int mx[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};
int check(int x){
int days=(x+4712)*365;
if(x<1582){
days+=(x+4712)/4+1;
}else{
days-=10;
days+=(1581+4712)/4+1;
days+=(x-1580)/4-(x-1500)/100+(x-1200)/400;
}
return days;
}
void getnextday(int isleap){
day++;
if(year==1582&&month==10&&day==5) day=15;
if(day>mx[isleap][month]) day=1,month++;
}
signed main(){
scanf("%lld",&q);
while(q--){
scanf("%lld",&n);
int l=-4712,r=1e9,ans;
while(r-l>5){
int mid=(l+r)>>1;
if(check(mid)<=n) l=mid+1;
else r=mid-1;
}
for(int i=r;i>=l;i--)
if(check(i)<=n){
ans=i;
break;
}
n-=check(ans);
year=ans;
if(ans<=0) ans--;
month=1,day=1;
while(n--) getnextday((n<1582&&n%4==0)||(n>1582&&((n%4==0&&n%100!=0)||n%400==0)));
if(ans==-4713) getnextday(0);
if(ans<0) printf("%lld %lld %lld BC\n",day,month,-ans);
else printf("%lld %lld %lld\n",day,month,ans);
}
return 0;
}