#include #include #include using namespace std; int x1,x2,y1,y2,t,ans[10005],tmp[5],In[10005]; vector vec[10005]; void NowState(int x) { tmp[1]=(x%10000)/1000; tmp[2]=(x%1000)/100; tmp[3]=(x%100)/10; tmp[4]=(x%10)/1; } int NowVal(int t1,int t2,int t3,int t4) { return t1*1000+t2*100+t3*10+t4*1; } queue Q; int main() { // freopen("tmp.out","w",stdout); for(int i=0;i<10000;i++) { In[i]=24; NowState(i); if(tmp[1]==0 || tmp[2]==0) { ans[i]=1; Q.push(i); continue; } if(tmp[3]==0 || tmp[4]==0) { ans[i]=-1; Q.push(i); continue; } for(int j=1;j<=2;j++) { for(int k=1;k<=4;k++) { if(j==k) continue; tmp[j]=(tmp[j]+tmp[k])%10; vec[NowVal(tmp[3],tmp[4],tmp[1],tmp[2])].push_back(i); vec[NowVal(tmp[4],tmp[3],tmp[1],tmp[2])].push_back(i); vec[NowVal(tmp[3],tmp[4],tmp[2],tmp[1])].push_back(i); vec[NowVal(tmp[4],tmp[3],tmp[2],tmp[1])].push_back(i); tmp[j]=(tmp[j]-tmp[k]+10)%10; } } } while(!Q.empty()) { int Now=Q.front(); Q.pop(); if(ans[Now]==1) { for(auto &p : vec[Now]) { if(ans[p]!=0) continue; In[p]--; if(In[p]==0) { ans[p]=-1; Q.push(p); } } } if(ans[Now]==-1) { for(auto &p : vec[Now]) { if(ans[p]!=0) continue; ans[p]=1; Q.push(p); } } } // for(int i=0;i<=9;i++) for(int j=0;j<=9;j++) for(int k=0;k<=9;k++) for(int l=0;l<=9;l++) // printf("f[%d][%d][%d][%d]=%d\n",i,j,k,l,ans[NowVal(i,j,k,l)]); scanf("%d",&t); while(t--) { scanf("%d%d%d%d",&x1,&x2,&y1,&y2); if(ans[NowVal(x1,x2,y1,y2)]==1) printf("Alice\n"); if(ans[NowVal(x1,x2,y1,y2)]==0) printf("Tie\n"); if(ans[NowVal(x1,x2,y1,y2)]==-1) printf("Bob\n"); } }