#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
struct character{
int maxhp,hp;
int maxmp,mp;
int atk,upatk;
int def,updef;
int tf,x,y;
int sk,a,b,c;
int dead;
int p[15];
}alice[15],bob[15];
struct upper{
int mp,atk,def;
}alice_upper[24005],bob_upper[24005];
struct last_skill{
int st,en;
}al,bo;
bool stal,stbo;
int n,lial,libo,now;
string winner;
bool fin;
int A(int k,int ty){
if(ty==1)return max(alice[k].atk+alice[k].upatk+alice_upper[now].atk,1);
return max(bob[k].atk+bob[k].upatk+bob_upper[now].atk,1);
}
int D(int k,int ty){
if(ty==1)return max(alice[k].def+alice[k].updef+alice_upper[now].def,0);
return max(bob[k].def+bob[k].updef+bob_upper[now].def,0);
}
void hurt(int kind,int per,int x,int y){
if(kind==1){
if(alice[per].dead)return;
alice[per].mp=min(alice[per].maxmp,alice[per].mp+1);
if(alice[per].tf!=1)alice[per].hp-=max(x-D(per,1),0)+y;
else alice[per].hp-=max(x-D(per,1),0)+y-ceil(y/2);
if(alice[per].hp<=0)alice[per].hp=0,alice[per].dead=1,lial--;
if(!lial)fin=1;
return;
}
if(bob[per].dead)return;
bob[per].mp=min(bob[per].maxmp,bob[per].mp+1);
if(bob[per].tf!=1)bob[per].hp-=max(x-D(per,2),0)+y;
else bob[per].hp-=max(x-D(per,2),0)+y-ceil(y/2);
if(bob[per].hp<=0)bob[per].hp=0,bob[per].dead=1,libo--;
if(!libo)fin=1;
return;
}
int jshurt_pa(int kind,int x,int y){
if(kind==1){
int com=A(x,kind),rea=0;
if(alice[x].tf==2)com=A(x,kind),rea=alice[x].x;
if(alice[x].tf==4)com=0,rea=A(x,kind);
if(bob[y].tf!=1)return max(com-D(y,2),0)+rea;
else return max(com-D(y,2),0)+rea-ceil(rea/2);
}
int com=A(x,kind),rea=0;
if(bob[x].tf==2)com=A(x,kind),rea=bob[x].x;
if(bob[x].tf==4)com=0,rea=A(x,kind);
if(alice[y].tf!=1)return max(com-D(y,1),0)+rea;
else return max(com-D(y,1),0)+rea-ceil(rea/2);
}
int is(int kind,int x,int y,int to1,int to2){
int a=jshurt_pa(kind,x,to1),b=jshurt_pa(kind,y,to2);
if(a<b)return 1;
if(a>b)return 2;
return 3;
}
void sk(int kind,int x){
if(kind==1){
int p=alice[x].sk,a=alice[x].a,b=alice[x].b,c=alice[x].c;
if(p==0)return;
if(p==1){
for(int i=1;i<=n;i++){
hurt(kind%2+1,i,a,0);
bob[i].mp-=ceil(bob[i].mp/10);
}
return;
}
if(p==2){
for(int i=1;i<=n;i++)
hurt(kind%2+1,i,0,A(x,kind));
return;
}
if(p==3){
for(int i=1;i<=n;i++)
hurt(kind%2+1,i,min(bob[i].maxhp/10,a*A(x,kind)),0);
return;
}
if(p==4){
for(int i=now;i<=now+a-1;i++)
alice_upper[i].mp+=b;
return;
}
if(p==5){
for(int i=1;i<=n;i++)
if(!bob[alice[x].p[i]].dead){
bob[alice[x].p[i]].updef-=a;
hurt(kind%2+1,alice[x].p[i],0,A(x,kind));
return;
}
return;
}
if(p==6){
for(int i=1;i<=n;i++)
hurt(kind%2+1,i,0,A(x,kind));
for(int i=now;i<=now+a-1;i++)
bob_upper[i].atk-=b;
return;
}
if(p==7){
int minn=1e9,who=0;
for(int i=1;i<=n;i++)
if(!alice[i].dead&&(minn>alice[i].hp||(minn==alice[i].hp&&who>i))){
minn=alice[i].hp;
who=i;
}
alice[who].hp+=c;
for(int i=now;i<=now+a-1;i++)
alice_upper[i].atk+=b;
return;
}
if(p==8){
for(int i=1;i<=n;i++)
hurt(kind%2+1,i,A(x,kind),0);
for(int i=now;i<=now+a-1;i++)
bob_upper[i].def-=b;
return;
}
if(p==9){
for(int i=1;i<=n;i++)
if(!alice[i].dead)alice[i].hp+=c;
for(int i=now;i<=now+a-1;i++)
alice_upper[i].def+=b;
return;
}
if(p==10){
for(int i=1;i<=n;i++){
if(alice[i].dead)continue;
if(alice[i].sk==10)alice[i].sk=0;
alice[i].atk*=2;
alice[i].def*=2;
alice[i].hp=max(alice[i].hp,alice[i].maxhp/2);
alice[i].mp=max(alice[i].mp,alice[i].maxmp/2);
}
for(int i=1;i<=n;i++)
if(!bob[i].dead&&bob[i].sk==10)bob[i].sk=0;
for(int i=now;i<=now+a-1;i++)
alice_upper[i].mp++;
stal=1;
al.st=now;
al.en=now+a-1;
return;
}
}
if(kind==2){
int p=bob[x].sk,a=bob[x].a,b=bob[x].b,c=bob[x].c;
if(p==0)return;
if(p==1){
for(int i=1;i<=n;i++){
hurt(kind%2+1,i,a,0);
alice[i].mp-=ceil(alice[i].mp/10);
}
return;
}
if(p==2){
for(int i=1;i<=n;i++)
hurt(kind%2+1,i,0,A(x,kind));
return;
}
if(p==3){
for(int i=1;i<=n;i++)
hurt(kind%2+1,i,min(alice[i].maxhp/10,a*A(x,kind)),0);
return;
}
if(p==4){
for(int i=now;i<=now+a-1;i++)
bob_upper[i].mp+=b;
return;
}
if(p==5){
for(int i=1;i<=n;i++)
if(!alice[bob[x].p[i]].dead){
alice[bob[x].p[i]].updef-=a;
hurt(kind%2+1,bob[x].p[i],0,A(x,kind));
return;
}
return;
}
if(p==6){
for(int i=1;i<=n;i++)
hurt(kind%2+1,i,0,A(x,kind));
for(int i=now;i<=now+a-1;i++)
alice_upper[i].atk-=b;
return;
}
if(p==7){
int minn=1e9,who=0;
for(int i=1;i<=n;i++)
if(!bob[i].dead&&(minn>bob[i].hp||(minn==bob[i].hp&&who>i))){
minn=bob[i].hp;
who=i;
}
bob[who].hp+=c;
for(int i=now;i<=now+a-1;i++)
bob_upper[i].atk+=b;
return;
}
if(p==8){
for(int i=1;i<=n;i++)
hurt(kind%2+1,i,A(x,kind),0);
for(int i=now;i<=now+a-1;i++)
alice_upper[i].def-=b;
return;
}
if(p==9){
for(int i=1;i<=n;i++)
if(!bob[i].dead)bob[i].hp+=c;
for(int i=now;i<=now+a-1;i++)
bob_upper[i].def+=b;
return;
}
if(p==10){
for(int i=1;i<=n;i++){
if(bob[i].dead)continue;
if(bob[i].sk==10)bob[i].sk=0;
bob[i].atk*=2;
bob[i].def*=2;
bob[i].hp=max(bob[i].hp,bob[i].maxhp/2);
bob[i].mp=max(bob[i].mp,bob[i].maxmp/2);
}
for(int i=now;i<=now+a-1;i++)
bob_upper[i].mp++;
for(int i=1;i<=n;i++)
if(!alice[i].dead&&alice[i].sk==10)alice[i].sk=0;
stbo=1;
bo.st=now;
bo.en=now+a-1;
return;
}
}
}
int op=0;
void game(){
while(!fin){
now++;
int maxn=-1,who=0,maxlife=0,shei=0,to=0;
for(int i=1;i<=n;i++)
if(!alice[i].dead){
if(alice[i].mp==alice[i].maxmp){
if(maxn<alice[i].sk||(maxn==alice[i].sk&&who<i)){
maxn=alice[i].sk;
who=i;
}
}
int maxx=0,wh=0;
for(int j=1;j<=n&&!maxx;j++)
if(!bob[alice[i].p[j]].dead)
if(maxx<bob[alice[i].p[j]].hp)wh=alice[i].p[j],maxx=bob[alice[i].p[j]].hp;
if(maxx>maxlife){
maxlife=maxx;
shei=i;
to=wh;
}else if(maxx==maxlife){
int flag=is(1,shei,i,to,wh);
if(flag==1)shei=i,to=wh;
else if(flag==3){
if(shei<i)to=wh,shei=i;
}
}
}
if(maxn!=-1){
alice[who].mp=0;
sk(1,who);
alice[who].mp++;
if(alice[who].tf==5&&!fin)alice[who].mp+=alice[who].y;
}
else{
int com=A(shei,1),rea=0;
if(alice[shei].tf==2)com=A(shei,1),rea=alice[shei].x;
if(alice[shei].tf==4)com=0,rea=A(shei,1);
hurt(2,to,com,rea);
alice[shei].mp++;
if(alice[shei].tf==5&&!fin)alice[shei].hp+=alice[shei].x;
}
for(int i=1;i<=n;i++){
if(alice[i].dead)continue;
alice[i].mp++;
alice[i].mp+=alice_upper[now].mp;
if(alice[i].tf==3){
alice[i].hp+=alice[i].x;
alice[i].mp+=alice[i].y;
}
alice[i].hp=min(alice[i].hp,alice[i].maxhp);
alice[i].mp=min(alice[i].mp,alice[i].maxmp);
}
if(fin){
winner="Alice";
return;
}
maxn=-1,who=0,maxlife=0,shei=0,to=0;
for(int i=1;i<=n;i++)
if(!bob[i].dead){
if(bob[i].mp==bob[i].maxmp){
if(maxn<bob[i].sk||(maxn==bob[i].sk&&who<i)){
maxn=bob[i].sk;
who=i;
}
}
int maxx=0,wh=0;
for(int j=1;j<=n;j++)
if(!alice[bob[i].p[j]].dead&&!maxx){
if(maxx<alice[bob[i].p[j]].hp)wh=bob[i].p[j],maxx=alice[bob[i].p[j]].hp;
}
if(maxx>maxlife){
maxlife=maxx;
shei=i;
to=wh;
}else if(maxx==maxlife){
int flag=is(2,shei,i,to,wh);
if(flag==1)shei=i,to=wh;
else if(flag==3){
if(shei<i)to=wh,shei=i;
}
}
}
if(maxn!=-1){
bob[who].mp=0;
sk(2,who);
bob[who].mp++;
if(bob[who].tf==5&&!fin)bob[who].mp+=bob[who].y;
}
else{
int com=A(shei,2),rea=0;
if(bob[shei].tf==2)com=A(shei,2),rea=bob[shei].x;
if(bob[shei].tf==4)com=0,rea=A(shei,2);
hurt(1,to,com,rea);
bob[shei].mp++;
if(bob[shei].tf==5&&!fin)bob[shei].hp+=bob[shei].x;
}
for(int i=1;i<=n;i++){
if(bob[i].dead)continue;
bob[i].mp++;
bob[i].mp+=bob_upper[now].mp;
if(bob[i].tf==3){
bob[i].hp+=bob[i].x;
bob[i].mp+=bob[i].y;
}
bob[i].hp=min(bob[i].hp,bob[i].maxhp);
bob[i].mp=min(bob[i].mp,bob[i].maxmp);
}
if(fin){
winner="Bob";
return;
}
if(stal&&now==al.en){
winner="Bob";
return;
}
if(stbo&&now==bo.en){
winner="Alice";
return;
}
if(now>=23333){
cout<<">_<";
op=1;
return;
}
}
}
signed main(){
cin>>n;
lial=libo=n;
for(int i=1;i<=n;i++){
cin>>alice[i].maxhp>>alice[i].maxmp>>alice[i].atk>>alice[i].def;
alice[i].hp=alice[i].maxhp;
for(int j=1;j<=n;j++)
cin>>alice[i].p[j];
cin>>alice[i].tf>>alice[i].x>>alice[i].y;
cin>>alice[i].sk>>alice[i].a>>alice[i].b>>alice[i].c;
}
for(int i=1;i<=n;i++){
cin>>bob[i].maxhp>>bob[i].maxmp>>bob[i].atk>>bob[i].def;
bob[i].hp=bob[i].maxhp;
for(int j=1;j<=n;j++)
cin>>bob[i].p[j];
cin>>bob[i].tf>>bob[i].x>>bob[i].y;
cin>>bob[i].sk>>bob[i].a>>bob[i].b>>bob[i].c;
}
game();
if(op)return 0;
cout<<now<<endl;
cout<<winner<<endl;
if(winner=="Alice"){
for(int i=1;i<=n;i++)
cout<<alice[i].hp<<' ';
return 0;
}
for(int i=1;i<=n;i++)
cout<<bob[i].hp<<' ';
return 0;
}