[UOJ 160][清华集训2015]斗地主
Posted lanrtabe
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[UOJ 160][清华集训2015]斗地主相关的知识,希望对你有一定的参考价值。
文字 数字 较多,加载略慢
Emm怎么没人做啊,网上都找不到题解我怎么抄
首先大力模拟,写一个对抗搜索,记录当前玩家的牌,对手的牌,当前玩家,对手上一次出的牌
然后加一个记忆化搜索,这样可以轻松跑出前两个Subtask(当然你可以加上O2优化跑得快一点)
然后我大力跑一下Subtask3,每个点都在(1s~2s)左右,然后跑了几十分钟也跑出来了
当然或许是因为i5-8250U然后开一大堆窗口的原因(复杂度爆炸(不过低压U确实慢
然后改成二分答案+判定,这样可以在搜索时加很多剪枝,比如当前玩家是自己且目前结果已经(ge Ans)就返回,其他类推
但还是很慢,我就放着跑,大概跑了(90min)终于出了Subtask4
总感觉什么地方写炸了,但是找不出来
复杂度大概是(O(2^{n+m} imes 15^3log^2))?
试了一下,Subtask5可能要跑一天
后来试了一下,跑到Test128炸内存了
官方题解说Subtask5中有的牌出现了多次,这些牌只用计算一次,然而我没看懂怎么实现
这个题写到后面代码已经乱得不行了,修改极其麻烦
就放一下暴力代码吧。u1s1,这种题放在考试里面我觉得不行
搜索+记忆化:
#pragma GCC optimize(3,"Ofast")
#include <map>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
typedef long long ll;
typedef std::pair<int,int> pii;
struct Cards
{
int c[20];
inline Cards(){memset(c,0,sizeof c);}
inline int Cnt(int Res=0){for(int i=3;i<=17;++i)Res+=c[i];return Res;}
//[3~17] -> [3, 4, 5, 6, 7, 8, 9, T, J, Q, K, A, 2, w, W]
};
struct Play//Play Cards
{
int Type,A,B;
//Type = 0 : None
// none
//Type = 1 : Rocket
// none
//Type = 2 : Bomb
// AAAA
//Type = 3 : Single
// A
//Type = 4 : Double
// AA
//Type = 5 : Triple
// AAA
//Type = 6 : 3+1
// AAA+?
//Type = 7 : 3+2
// AAA+??
//Type = 8 : Junko(Single)
// A~B
//Type = 9 : Junko(Double)
// AA~BB
//Type = 10 : Junko(Triple)
// AAA~BBB
//Type = 11 : 4+1+1
// AAAA+?+?
//Type = 12 : 4+2+2
// AAAA+??+??
//Type = 13 : Plane(Single)
// AAA~BBB+?...
//Type = 14 : Plane(Double)
// AAA~BBB+??...
};
struct Status
{
ll A,B,C;//Status compression
inline Status(const Cards& _A,const Cards& _B,const int Np,const Play& Last)
{
A=B=0,C=Np*8000+Last.Type*400+Last.A*20+Last.B;
for(int i=3;i<=17;++i)A=A*5+_A.c[i],B=B*5+_B.c[i];
}
inline bool operator<(const Status& o)const{return A!=o.A?A<o.A:(B!=o.B?B<o.B:C<o.C);}
};
inline int ID(char c)
{
if(c>='3'&&c<='9')return c^48;
if(c=='T')return 10;
if(c=='J')return 11;
if(c=='Q')return 12;
if(c=='K')return 13;
if(c=='A')return 14;
if(c=='2')return 15;
return c=='w'?16:17;
}
std::vector<int> Cs;
inline void Choose(std::vector<std::vector<int> >& Plans,Cards& P,const int Tc,const int Ec,int x)
{
//Plans of Choosing Tc Pair(s) (Each contains Ec Elements) in P
if((int)Cs.size()==Tc)return Plans.push_back(Cs);
for(int i=x;i<=17;++i)
if(P.c[i]>=Ec)
{
P.c[i]-=Ec,Cs.push_back(i);
Choose(Plans,P,Tc,Ec,i);
P.c[i]+=Ec,Cs.pop_back();
}
}
std::map<Status,int> Result;
int DFS(Cards& A,Cards& B,int Np,const Play Last)
{
//Max Score A Could Get
//A -> Now_Player B -> Next_Player
//Np -> Now_Player_ID Last -> Last_Played_Cards
if(!B.Cnt())return -A.Cnt();//Now_Player Losed With A.Cnt() Cards
Status Ns=Status(A,B,Np,Last);
if(Result.find(Ns)!=Result.end())return Result[Ns];
int Res=-100;
if(Last.Type)Res=std::max(Res,-DFS(B,A,Np^1,(Play){0,0,0}));//Pass
if(A.c[16]&&A.c[17])//Type 1 Always The Strongest
{
A.c[16]=A.c[17]=0;
Res=std::max(Res,-DFS(B,A,Np^1,(Play){1,0,0}));
A.c[16]=A.c[17]=1;
}
for(int i=3;i<=15;++i)//Type 2
if(A.c[i]==4&&!(Last.Type==1||(Last.Type==2&&Last.A>i)))
A.c[i]=0,Res=std::max(Res,-DFS(B,A,Np^1,(Play){2,i,0})),A.c[i]=4;
for(int i=3;i<=17;++i)
{
if(A.c[i]&&(!Last.Type||(Last.Type==3&&Last.A<i)))//Type 3
--A.c[i],Res=std::max(Res,-DFS(B,A,Np^1,(Play){3,i,0})),++A.c[i];
if(A.c[i]>=2&&(!Last.Type||(Last.Type==4&&Last.A<i)))//Type 4
A.c[i]-=2,Res=std::max(Res,-DFS(B,A,Np^1,(Play){4,i,0})),A.c[i]+=2;
if(A.c[i]>=3)
{
A.c[i]-=3;
if(!Last.Type||(Last.Type==5&&Last.A<i))//Type 5
Res=std::max(Res,-DFS(B,A,Np^1,(Play){5,i,0}));
for(int j=3;j<=17;++j)
{
if(j==i)continue;
if(A.c[j]&&(!Last.Type||(Last.Type==6&&Last.A<i)))//Type 6
--A.c[j],Res=std::max(Res,-DFS(B,A,Np^1,(Play){6,i,0})),++A.c[j];
if(A.c[j]>=2&&(!Last.Type||(Last.Type==7&&Last.A<i)))//Type 7
A.c[j]-=2,Res=std::max(Res,-DFS(B,A,Np^1,(Play){7,i,0})),A.c[j]+=2;
}
A.c[i]+=3;
}
}
for(int i=3;i<=14;++i)
{
int Minc=4;
for(int j=i;j<=14;++j)
{
Minc=std::min(Minc,A.c[j]);
if(Minc&&(!Last.Type||(Last.Type==8&&j-i==Last.B-Last.A&&Last.A<i))&&j-i+1>=5)//Type 8
{
for(int k=i;k<=j;++k)--A.c[k];
Res=std::max(Res,-DFS(B,A,Np^1,(Play){8,i,j}));
for(int k=i;k<=j;++k)++A.c[k];
}
if(Minc>=2&&(!Last.Type||(Last.Type==9&&j-i==Last.B-Last.A&&Last.A<i))&&j-i+1>=3)//Type 9
{
for(int k=i;k<=j;++k)A.c[k]-=2;
Res=std::max(Res,-DFS(B,A,Np^1,(Play){9,i,j}));
for(int k=i;k<=j;++k)A.c[k]+=2;
}
if(Minc>=3&&j-i+1>=2)
{
for(int k=i;k<=j;++k)A.c[k]-=3;
if(!Last.Type||(Last.Type==10&&j-i==Last.B-Last.A&&Last.A<i))//Type 10
Res=std::max(Res,-DFS(B,A,Np^1,(Play){10,i,j}));
if(!Last.Type||(Last.Type==13&&j-i==Last.B-Last.A&&Last.A<i))//Type 13
{
std::vector<std::vector<int> > Plans;
Choose(Plans,A,j-i+1,1,3);
for(auto p:Plans)
{
for(auto ps:p)--A.c[ps];
Res=std::max(Res,-DFS(B,A,Np^1,(Play){13,i,j}));
for(auto ps:p)++A.c[ps];
}
}
if(!Last.Type||(Last.Type==14&&j-i==Last.B-Last.A&&Last.A<i))//Type 14
{
std::vector<std::vector<int> > Plans;
Choose(Plans,A,j-i+1,2,3);
for(auto p:Plans)
{
for(auto ps:p)A.c[ps]-=2;
Res=std::max(Res,-DFS(B,A,Np^1,(Play){14,i,j}));
for(auto ps:p)A.c[ps]+=2;
}
}
for(int k=i;k<=j;++k)A.c[k]+=3;
}
}
}
for(int i=3;i<=15;++i)
if(A.c[i]==4)
{
A.c[i]=0;
for(int j=3;j<=17;++j)
{
if(A.c[j])
{
--A.c[j];
for(int k=j;k<=17;++k)
if(A.c[k]&&(!Last.Type||(Last.Type==11&&Last.A<i)))//Type 11
--A.c[k],Res=std::max(Res,-DFS(B,A,Np^1,(Play){11,i,0})),++A.c[k];
++A.c[j];
}
if(A.c[j]>=2)
{
A.c[j]-=2;
for(int k=j;k<=15;++k)
if(A.c[k]>=2&&(!Last.Type||(Last.Type==12&&Last.A<i)))//Type 12
A.c[k]-=2,Res=std::max(Res,-DFS(B,A,Np^1,(Play){12,i,0})),A.c[k]+=2;
A.c[j]+=2;
}
}
A.c[i]=4;
}
return Result[Ns]=Res;
}
int main()
{
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
for(int n,m,Cas=1;scanf("%d%d",&n,&m),n||m;++Cas)
{
char s[30];
Cards P0,P1;
Result.clear();
scanf("%s",s+1);
for(int i=1;i<=n;++i)++P0.c[ID(s[i])];
scanf("%s",s+1);
for(int i=1;i<=m;++i)++P1.c[ID(s[i])];
printf("%d
",DFS(P0,P1,0,(Play){0,0,0}));
std::cerr<<"Solve "<<Cas<<'
';
}
return 0;
}
搜索+记忆化+二分答案+剪枝
#pragma GCC optimize(3,"Ofast")
#include <map>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
typedef long long ll;
typedef std::pair<int,int> pii;
struct Cards
{
int c[20];
inline Cards(){memset(c,0,sizeof c);}
inline int Cnt(int Res=0){for(int i=3;i<=17;++i)Res+=c[i];return Res;}
//[3~17] -> [3, 4, 5, 6, 7, 8, 9, T, J, Q, K, A, 2, w, W]
};
struct Play//Play Cards
{
int Type,A,B;
//Type = 0 : None
// none
//Type = 1 : Rocket
// none
//Type = 2 : Bomb
// AAAA
//Type = 3 : Single
// A
//Type = 4 : Double
// AA
//Type = 5 : Triple
// AAA
//Type = 6 : 3+1
// AAA+?
//Type = 7 : 3+2
// AAA+??
//Type = 8 : Junko(Single)
// A~B
//Type = 9 : Junko(Double)
// AA~BB
//Type = 10 : Junko(Triple)
// AAA~BBB
//Type = 11 : 4+1+1
// AAAA+?+?
//Type = 12 : 4+2+2
// AAAA+??+??
//Type = 13 : Plane(Single)
// AAA~BBB+?...
//Type = 14 : Plane(Double)
// AAA~BBB+??...
};
struct Status
{
ll A,B,C;//Status compression
inline Status(const Cards& _A,const Cards& _B,const int Np,const Play& Last)
{
A=B=0,C=Np*8000+Last.Type*400+Last.A*20+Last.B;
for(int i=3;i<=17;++i)A=A*5+_A.c[i],B=B*5+_B.c[i];
}
inline bool operator<(const Status& o)const{return A!=o.A?A<o.A:(B!=o.B?B<o.B:C<o.C);}
};
inline int ID(char c)
{
if(c>='3'&&c<='9')return c^48;
if(c=='T')return 10;
if(c=='J')return 11;
if(c=='Q')return 12;
if(c=='K')return 13;
if(c=='A')return 14;
if(c=='2')return 15;
return c=='w'?16:17;
}
std::vector<int> Cs;
inline void Choose(std::vector<std::vector<int> >& Plans,Cards& P,const int Tc,const int Ec,int x)
{
//Plans of Choosing Tc Pair(s) (Each contains Ec Elements) in P
if((int)Cs.size()==Tc)return Plans.push_back(Cs);
for(int i=x;i<=17;++i)
if(P.c[i]>=Ec)
{
P.c[i]-=Ec,Cs.push_back(i);
Choose(Plans,P,Tc,Ec,i);
P.c[i]+=Ec,Cs.pop_back();
}
}
int Ans;
std::map<Status,int> Result;
int DFS(Cards& A,Cards& B,int Np,const Play Last)
{
//Max Score A Could Get
//A -> Now_Player B -> Next_Player
//Np -> Now_Player_ID Last -> Last_Played_Cards
int Ac=A.Cnt(),Bc=B.Cnt();
if(!Np&&Bc<Ans)return -100;
if(!Np&&-Ac>=Ans)return 100;
if(Np&&Ac<Ans)return 100;
if(Np&&-Bc>=Ans)return -100;
if(!Bc)return -Ac;//Now_Player Losed With A.Cnt() Cards
Status Ns=Status(A,B,Np,Last);
if(Result.find(Ns)!=Result.end())return Result[Ns];
int &Res=Result[Ns]=-100;
if(Last.Type)Res=std::max(Res,-DFS(B,A,Np^1,(Play){0,0,0}));//Pass
if((!Np&&Res>=Ans)||(Np&&-Res<Ans))return Res;
if(A.c[16]&&A.c[17])//Type 1 Always The Strongest
{
A.c[16]=A.c[17]=0;
Res=std::max(Res,-DFS(B,A,Np^1,(Play){1,0,0}));
A.c[16]=A.c[17]=1;
}
if((!Np&&Res>=Ans)||(Np&&-Res<Ans))return Res;
for(int i=3;i<=15;++i)//Type 2
if(A.c[i]==4&&!(Last.Type==1||(Last.Type==2&&Last.A>i)))
{
A.c[i]=0,Res=std::max(Res,-DFS(B,A,Np^1,(Play){2,i,0})),A.c[i]=4;
if((!Np&&Res>=Ans)||(Np&&-Res<Ans))return Res;
}
for(int i=3;i<=17;++i)
{
if(A.c[i]&&(!Last.Type||(Last.Type==3&&Last.A<i)))//Type 3
{
--A.c[i],Res=std::max(Res,-DFS(B,A,Np^1,(Play){3,i,0})),++A.c[i];
if((!Np&&Res>=Ans)||(Np&&-Res<Ans))return Res;
}
if(A.c[i]>=2&&(!Last.Type||(Last.Type==4&&Last.A<i)))//Type 4
{
A.c[i]-=2,Res=std::max(Res,-DFS(B,A,Np^1,(Play){4,i,0})),A.c[i]+=2;
if((!Np&&Res>=Ans)||(Np&&-Res<Ans))return Res;
}
if(A.c[i]>=3)
{
A.c[i]-=3;
if(!Last.Type||(Last.Type==5&&Last.A<i))//Type 5
{
Res=std::max(Res,-DFS(B,A,Np^1,(Play){5,i,0}));
if((!Np&&Res>=Ans)||(Np&&-Res<Ans))return A.c[i]+=3,Res;
}
for(int j=3;j<=17;++j)
{
if(j==i)continue;
if(A.c[j]&&(!Last.Type||(Last.Type==6&&Last.A<i)))//Type 6
{
--A.c[j],Res=std::max(Res,-DFS(B,A,Np^1,(Play){6,i,0})),++A.c[j];
if((!Np&&Res>=Ans)||(Np&&-Res<Ans))return A.c[i]+=3,Res;
}
if(A.c[j]>=2&&(!Last.Type||(Last.Type==7&&Last.A<i)))//Type 7
{
A.c[j]-=2,Res=std::max(Res,-DFS(B,A,Np^1,(Play){7,i,0})),A.c[j]+=2;
if((!Np&&Res>=Ans)||(Np&&-Res<Ans))return A.c[i]+=3,Res;
}
}
A.c[i]+=3;
}
}
for(int i=3;i<=14;++i)
{
int Minc=4;
for(int j=i;j<=14;++j)
{
Minc=std::min(Minc,A.c[j]);
if(Minc&&(!Last.Type||(Last.Type==8&&j-i==Last.B-Last.A&&Last.A<i))&&j-i+1>=5)//Type 8
{
for(int k=i;k<=j;++k)--A.c[k];
Res=std::max(Res,-DFS(B,A,Np^1,(Play){8,i,j}));
for(int k=i;k<=j;++k)++A.c[k];
if((!Np&&Res>=Ans)||(Np&&-Res<Ans))return Res;
}
if(Minc>=2&&(!Last.Type||(Last.Type==9&&j-i==Last.B-Last.A&&Last.A<i))&&j-i+1>=3)//Type 9
{
for(int k=i;k<=j;++k)A.c[k]-=2;
Res=std::max(Res,-DFS(B,A,Np^1,(Play){9,i,j}));
for(int k=i;k<=j;++k)A.c[k]+=2;
if((!Np&&Res>=Ans)||(Np&&-Res<Ans))return Res;
}
if(Minc>=3&&j-i+1>=2)
{
if(!Last.Type||(Last.Type==10&&j-i==Last.B-Last.A&&Last.A<i))//Type 10
{
for(int k=i;k<=j;++k)A.c[k]-=3;
Res=std::max(Res,-DFS(B,A,Np^1,(Play){10,i,j}));
for(int k=i;k<=j;++k)A.c[k]+=3;
if((!Np&&Res>=Ans)||(Np&&-Res<Ans))return Res;
}
if(!Last.Type||(Last.Type==13&&j-i==Last.B-Last.A&&Last.A<i))//Type 13
{
std::vector<std::vector<int> > Plans;
for(int k=i;k<=j;++k)A.c[k]-=3;
Choose(Plans,A,j-i+1,1,3);
for(int k=i;k<=j;++k)A.c[k]+=3;
for(auto p:Plans)
{
for(auto ps:p)--A.c[ps];
for(int k=i;k<=j;++k)A.c[k]-=3;
Res=std::max(Res,-DFS(B,A,Np^1,(Play){13,i,j}));
for(auto ps:p)++A.c[ps];
for(int k=i;k<=j;++k)A.c[k]+=3;
if((!Np&&Res>=Ans)||(Np&&-Res<Ans))return Res;
}
}
if(!Last.Type||(Last.Type==14&&j-i==Last.B-Last.A&&Last.A<i))//Type 14
{
std::vector<std::vector<int> > Plans;
for(int k=i;k<=j;++k)A.c[k]-=3;
Choose(Plans,A,j-i+1,2,3);
for(int k=i;k<=j;++k)A.c[k]+=3;
for(auto p:Plans)
{
for(auto ps:p)A.c[ps]-=2;
for(int k=i;k<=j;++k)A.c[k]-=3;
Res=std::max(Res,-DFS(B,A,Np^1,(Play){14,i,j}));
for(auto ps:p)A.c[ps]+=2;
for(int k=i;k<=j;++k)A.c[k]+=3;
if((!Np&&Res>=Ans)||(Np&&-Res<Ans))return Res;
}
}
}
}
}
for(int i=3;i<=15;++i)
if(A.c[i]==4)
{
A.c[i]=0;
for(int j=3;j<=17;++j)
{
if(A.c[j])
{
--A.c[j];
for(int k=j;k<=17;++k)
if(A.c[k]&&(!Last.Type||(Last.Type==11&&Last.A<i)))//Type 11
{
--A.c[k],Res=std::max(Res,-DFS(B,A,Np^1,(Play){11,i,0})),++A.c[k];
if((!Np&&Res>=Ans)||(Np&&-Res<Ans))
{
++A.c[j],A.c[i]=4;
return Res;
}
}
++A.c[j];
}
if(A.c[j]>=2)
{
A.c[j]-=2;
for(int k=j;k<=15;++k)
if(A.c[k]>=2&&(!Last.Type||(Last.Type==12&&Last.A<i)))//Type 12
{
A.c[k]-=2,Res=std::max(Res,-DFS(B,A,Np^1,(Play){12,i,0})),A.c[k]+=2;
if((!Np&&Res>=Ans)||(Np&&-Res<Ans))
{
A.c[j]+=2,A.c[i]=4;
return Res;
}
}
A.c[j]+=2;
}
}
A.c[i]=4;
if((!Np&&Res>=Ans))return Res;
}
return Res;
}
int main()
{
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
for(int n,m,Cas=1;scanf("%d%d",&n,&m),n||m;++Cas)
{
char s[30];
Cards P0,P1;
scanf("%s",s+1);
for(int i=1;i<=n;++i)++P0.c[ID(s[i])];
scanf("%s",s+1);
for(int i=1;i<=m;++i)++P1.c[ID(s[i])];
int l=-6,r=21;
while(l<r)
{
Ans=((l+60+r+60)>>1)-60,Result.clear();
if(DFS(P0,P1,0,(Play){0,0,0})>=Ans)l=Ans+1;
else r=Ans;
}
printf("%d
",l-1);
std::cerr<<"Solve "<<Cas<<'
';
}
return 0;
}
landlords1.out
-1
1
1
7
8
4
1
8
8
-1
7
3
8
2
8
1
-1
8
4
8
2
-1
8
-1
4
3
8
8
-1
3
3
4
8
2
8
3
-1
2
2
7
1
-1
1
-1
1
7
7
7
-1
1
8
-1
2
8
4
8
4
1
2
2
-1
2
1
1
4
7
2
2
8
8
-1
7
8
7
3
8
7
8
3
8
7
1
2
2
7
7
-2
8
5
4
4
8
1
8
4
7
6
-2
7
3
4
8
2
4
2
7
2
4
-2
8
-1
-1
8
8
4
1
8
8
2
4
-2
2
8
8
-1
1
3
7
2
7
2
3
8
7
8
3
-2
-1
-2
8
7
3
4
3
8
7
1
-2
8
8
2
8
7
-1
1
1
7
3
2
8
2
7
8
-2
1
8
3
2
-1
7
1
1
8
2
8
8
-1
8
2
-1
5
4
7
7
3
8
8
1
8
8
7
7
-1
3
4
8
-2
1
4
1
2
7
1
-2
2
8
3
8
-1
8
3
1
-1
-1
1
8
7
8
8
2
8
4
3
8
8
8
-2
1
8
6
-2
-1
2
7
1
8
6
3
2
-1
2
2
1
8
7
2
-1
8
7
-2
1
-1
7
7
7
8
-1
7
-1
3
1
3
8
7
-2
7
-1
8
-1
4
8
8
7
6
-1
4
-1
-2
3
1
8
2
8
2
2
1
6
1
7
7
-1
-1
8
8
2
7
7
4
4
2
-1
2
1
7
8
2
-1
8
3
1
-1
8
7
7
-1
3
4
-1
7
2
2
-2
1
8
-1
8
7
8
-1
2
-1
1
2
8
8
7
-1
7
-1
1
8
8
7
7
7
8
7
-1
2
8
-1
-1
7
7
2
2
8
7
8
8
8
7
-1
8
8
6
3
8
1
4
2
1
8
8
7
8
-1
6
8
8
2
4
-1
-2
2
8
4
8
4
1
-1
4
1
8
8
6
2
2
7
7
3
7
7
-2
5
2
8
1
3
3
7
1
5
1
4
3
-1
4
-2
3
8
1
4
3
-1
2
1
2
-1
1
2
-1
8
-2
1
8
-1
8
-1
2
8
8
2
-2
2
1
2
-1
-1
-1
8
8
8
7
1
2
6
-1
8
6
-1
8
1
7
2
-2
8
-1
2
2
2
-1
8
1
2
7
4
8
8
1
4
2
7
2
7
-1
-2
1
8
8
-1
8
3
1
1
8
1
2
-1
3
2
7
1
4
8
2
7
-1
-2
2
8
1
8
6
-1
3
2
8
1
2
1
1
8
2
2
4
1
7
4
7
3
7
2
4
-1
4
3
4
8
8
7
7
-2
1
-2
7
-1
8
-2
8
1
3
-1
8
2
4
8
3
4
2
-1
8
1
3
2
-2
1
-1
8
1
2
-1
4
8
4
-2
2
8
3
8
7
2
3
8
-2
2
8
2
1
-1
1
7
1
8
8
2
4
3
8
8
2
4
1
8
8
2
-1
-1
-1
2
1
2
3
8
2
2
8
8
8
1
-1
-1
2
7
1
-1
7
3
7
8
7
2
-2
8
-1
-1
1
-2
-1
8
4
8
1
7
1
-2
2
4
1
7
8
-2
2
-2
8
1
8
1
-2
8
4
8
2
7
8
2
8
2
7
4
1
-1
4
4
7
2
-1
-1
1
-2
7
1
3
-2
7
1
4
-1
-2
7
8
7
1
2
6
1
8
3
-1
7
7
7
8
3
1
2
8
8
-1
-1
-2
8
8
8
4
-2
2
8
2
2
1
3
1
7
2
1
2
1
2
-1
8
2
2
2
8
2
8
4
3
8
8
4
-2
4
8
7
1
7
8
-1
2
7
-1
2
2
2
4
5
1
7
8
8
2
2
8
1
-2
8
8
2
2
1
6
-1
8
7
7
8
2
-2
7
2
2
8
7
2
1
8
8
-2
-2
7
8
3
1
1
-1
7
7
1
-1
-2
7
8
3
7
2
2
5
8
-2
3
8
7
2
7
8
1
-1
-2
4
8
3
1
1
-1
8
-1
4
-1
3
-1
1
8
-2
8
8
8
8
7
4
8
1
2
8
2
-2
2
-2
7
-1
2
8
-2
7
8
7
6
-1
1
4
4
2
2
1
3
7
8
7
-1
-2
8
7
1
8
-1
-1
7
3
3
-1
7
4
1
8
3
7
8
2
8
2
-1
-1
2
2
8
2
8
7
1
1
8
2
4
8
-1
4
3
1
7
8
1
8
4
8
8
1
8
1
2
7
7
1
2
8
-1
4
7
-2
8
8
2
7
8
7
-1
2
7
3
7
2
4
8
3
-1
8
-2
2
-1
1
4
8
3
8
7
-1
4
-2
4
8
1
4
7
8
8
-1
8
7
2
8
8
-1
-2
8
1
1
8
1
8
-2
1
-1
4
2
7
3
8
4
2
8
-1
-2
2
8
-2
4
-1
8
8
2
2
2
2
1
3
2
2
2
8
8
-1
-1
1
8
8
-1
2
4
-1
7
-2
8
8
2
-1
1
7
5
7
-1
8
7
7
-1
4
8
4
7
2
4
5
-1
2
7
-2
7
8
2
-1
-1
-2
2
-1
7
6
7
8
7
-1
-1
7
8
-1
-2
2
8
4
7
-2
-1
7
5
-1
2
8
2
8
7
-1
7
4
8
7
1
8
2
7
-1
7
7
2
4
1
1
3
7
7
7
-1
7
-1
7
2
8
8
4
4
8
7
1
8
3
-1
3
1
-1
8
8
1
1
2
8
-1
-2
2
2
4
8
-1
3
4
1
4
8
8
4
-2
7
1
-1
-1
-1
4
8
2
-1
8
1
1
1
8
2
1
-1
7
1
8
7
1
8
1
8
8
8
1
-1
-1
-1
7
-1
1
2
8
6
4
-1
1
7
1
8
2
8
3
8
2
8
-1
7
8
-1
4
1
8
2
7
6
5
8
1
-1
8
2
1
-2
8
-2
8
7
-1
-1
-2
-1
7
3
1
8
1
2
8
7
-2
1
7
1
7
8
3
4
1
2
1
-1
1
-1
-1
1
-1
1
8
-2
7
8
8
8
2
8
7
8
3
7
7
7
8
1
7
8
8
1
8
2
2
8
1
-1
7
2
8
3
2
1
1
2
1
6
8
7
-1
1
2
8
6
1
1
7
1
3
-2
2
5
8
2
8
7
7
-1
8
1
2
-1
3
7
-1
7
8
8
4
1
-2
8
-1
-2
8
-2
4
7
8
-2
-2
8
8
2
2
7
8
7
-1
8
2
1
7
3
4
2
2
7
8
2
5
8
1
7
3
-2
8
8
-2
8
7
2
1
8
3
-1
8
-1
2
7
8
2
8
2
8
7
8
-1
8
-1
6
-1
7
8
2
4
7
1
4
8
4
7
-1
-1
2
8
-1
7
-1
-1
-1
2
1
2
4
1
2
2
7
8
-1
2
8
1
4
8
4
3
8
8
8
1
8
-1
2
1
3
8
3
1
8
-2
3
8
7
2
7
-1
1
2
8
-1
7
-1
2
2
-1
8
7
8
-1
-1
8
-1
8
6
7
-1
1
8
4
-1
7
-1
7
1
3
8
8
8
1
4
8
2
7
8
-1
4
7
-2
3
1
-2
7
-1
3
-2
8
8
7
8
2
7
2
-1
-2
8
7
7
7
1
1
-2
-2
2
8
7
-1
7
8
7
2
3
-1
1
1
8
2
7
7
7
6
5
7
1
-1
7
-1
8
7
8
8
4
4
8
2
1
-2
8
1
3
7
8
2
7
2
-1
3
8
1
8
-1
8
2
2
2
3
2
2
3
2
8
7
3
6
4
7
2
3
4
-1
7
7
1
8
-1
8
-1
-2
3
1
7
-1
2
-1
8
8
8
7
1
1
8
8
1
8
-1
-1
1
-1
2
-1
8
1
-2
2
8
4
7
-1
2
7
1
4
-2
-1
-2
8
8
8
1
7
2
3
1
2
7
2
4
1
7
2
7
4
4
8
-1
4
-1
2
8
-1
2
8
3
3
1
7
1
7
7
-1
6
7
-1
4
1
-1
-1
8
1
8
7
2
8
7
3
4
7
-1
-1
7
-1
7
1
7
2
2
7
7
7
8
7
1
8
1
-1
2
1
4
1
8
7
-1
8
8
7
2
-1
4
7
3
7
6
8
-1
7
2
7
-2
7
8
-2
-1
-1
-2
3
8
1
-1
1
8
1
8
2
1
8
7
3
8
4
7
7
7
3
1
4
3
-2
1
1
8
2
-2
6
7
2
7
8
3
8
7
4
7
1
3
-2
-1
8
8
7
1
1
7
4
8
1
-1
7
7
4
-2
3
1
-1
1
7
7
7
8
4
3
1
3
8
-2
-2
3
8
8
7
1
2
-1
8
-1
2
-1
2
3
8
-2
8
8
2
1
-1
-1
2
8
-1
-2
1
8
8
7
2
3
4
8
1
7
8
8
-2
7
7
7
-2
-2
8
-1
7
7
1
-1
1
8
7
4
-1
-1
1
2
8
2
2
7
-1
4
7
-1
-2
3
-1
2
6
1
4
4
8
7
1
7
7
8
-2
-1
7
7
8
4
8
8
2
4
8
7
7
8
7
8
-2
-1
3
7
-1
1
7
1
8
4
-1
8
-2
-2
-1
4
7
7
6
3
2
-1
2
4
8
-2
7
2
8
4
1
8
-1
4
2
4
7
8
-1
4
7
3
4
4
7
1
7
7
1
7
8
-1
-1
4
8
2
4
8
-1
8
1
8
5
2
1
3
1
8
8
-1
8
8
4
7
8
-1
8
4
2
-1
8
8
7
-1
4
-2
-1
2
1
3
2
7
2
-1
7
1
-2
8
2
4
-1
3
-1
7
8
2
1
8
4
1
1
7
2
1
1
8
4
8
-1
8
1
8
2
8
3
8
7
2
3
2
2
8
3
2
-1
7
-1
2
4
-2
3
8
8
4
4
3
7
7
8
6
8
7
8
2
-1
4
2
8
8
7
3
-1
-2
2
7
7
8
4
8
4
4
1
7
-2
7
-1
8
8
4
4
landlords2.out
9
1
3
3
3
10
-1
1
2
1
10
-1
-1
-1
-1
10
6
1
-3
4
2
3
1
2
2
5
2
-1
9
5
4
3
-2
10
3
2
1
-1
2
9
9
10
1
-1
10
-3
-1
3
-1
-1
-1
2
10
9
9
2
1
-2
9
4
10
3
10
2
2
3
-1
3
-1
2
7
4
-2
-1
2
10
6
10
6
2
1
4
5
-3
10
3
-1
-2
3
3
10
3
-2
-1
3
10
9
-1
1
10
2
9
1
2
3
-1
-3
2
-1
-1
10
1
-1
-1
4
-1
10
10
9
-3
-1
2
1
8
-3
2
-1
1
-2
1
1
5
7
2
-2
1
1
-2
3
9
2
1
10
6
9
10
-1
9
-2
-3
1
7
1
9
2
4
9
9
3
10
3
-2
-1
-1
-1
8
1
2
-2
10
10
1
-1
1
9
-3
2
2
-3
10
1
2
1
1
1
-2
1
4
9
1
5
9
-1
-2
1
4
2
-1
4
1
2
9
1
2
10
1
1
1
2
-1
2
9
3
-1
-1
1
-1
-3
10
10
10
5
3
3
-1
1
10
2
10
4
-3
6
9
-1
-1
1
2
3
9
10
1
-3
-1
1
-1
1
2
1
9
9
10
-2
-2
-1
3
-1
2
3
3
6
-1
10
3
2
9
1
-1
-1
6
10
9
2
5
1
1
1
2
10
3
9
10
10
-1
2
10
3
3
-1
7
-1
9
9
1
1
1
3
2
7
10
2
3
2
3
1
-1
-1
-1
3
1
3
2
9
4
2
-1
2
-2
-1
4
9
5
1
10
9
2
-2
3
-1
2
-1
-2
2
1
4
9
1
-1
9
-2
2
1
-1
1
-1
-1
10
1
10
9
-2
-2
3
2
2
10
10
-3
9
8
3
1
2
3
7
6
7
4
-2
4
1
-1
-2
2
1
1
10
4
1
3
1
-2
10
9
-2
9
-1
9
3
-2
-3
-1
9
10
9
2
9
10
10
-1
9
9
-2
10
1
4
10
-3
3
9
1
10
10
3
2
10
5
1
-1
2
10
7
2
9
9
-1
-2
-2
9
-2
9
10
9
2
9
-1
9
9
2
1
9
-2
-1
4
-1
-2
-2
-1
9
1
4
3
-1
9
9
1
-1
2
1
-3
9
10
3
3
-1
10
9
5
-1
4
-1
10
-2
2
9
3
-1
3
2
2
9
10
9
9
-1
9
2
1
-1
-1
9
1
2
-1
3
2
9
-1
3
1
-2
-2
2
9
2
10
1
9
10
1
1
10
8
-2
-2
2
3
7
3
-1
10
2
-1
1
1
10
3
10
2
1
-2
10
-2
10
-1
-1
10
3
10
3
2
2
7
4
-1
-1
4
1
9
9
3
-1
10
10
2
-2
1
2
10
1
4
-1
3
3
-3
10
1
8
4
3
1
5
-1
-3
9
7
3
9
9
-2
1
10
10
9
10
3
3
1
-1
9
9
3
4
7
9
10
4
2
2
9
-1
4
1
2
1
9
4
4
9
2
9
9
-1
-1
-1
10
5
10
10
-1
3
4
-2
2
1
4
-3
10
-1
3
10
10
6
3
1
2
10
-1
9
1
3
9
5
9
3
-1
-2
3
9
6
10
1
3
5
2
1
-1
9
4
-1
5
1
2
9
1
10
-1
-3
9
-3
9
7
-1
2
-1
-1
-2
3
-3
10
1
-3
9
1
1
2
10
-1
10
-2
1
3
9
5
2
2
-3
2
-1
9
2
5
10
3
-1
-2
10
10
10
10
9
4
-1
3
1
1
2
-1
9
3
7
1
1
7
-2
2
10
10
9
5
2
1
-2
7
-1
10
10
1
9
-2
10
-1
9
4
9
-3
9
6
5
-1
9
9
-1
3
1
3
-1
-1
-1
4
1
2
1
9
7
2
5
-3
9
3
10
10
-1
-1
10
3
2
-1
2
10
1
9
10
5
2
5
-1
2
-1
-2
-1
5
2
1
2
1
3
-1
9
9
-1
-3
2
-1
-3
10
3
10
-2
2
4
-1
1
9
-2
2
2
10
-1
9
1
2
1
3
-2
-1
9
-1
3
-3
10
1
-3
-2
6
2
2
1
-1
9
6
2
10
5
-1
-3
10
2
4
8
9
9
5
1
-1
-3
2
3
-3
1
-1
1
-2
-1
3
10
9
-1
9
9
9
3
1
9
-2
10
1
10
3
-1
-1
10
5
3
2
-2
9
-1
-1
4
-2
-1
-1
3
1
2
2
9
10
2
6
1
9
-1
2
9
4
3
1
9
-3
9
-1
2
10
-1
3
10
-2
-2
5
3
9
5
3
1
2
10
1
3
10
2
10
10
-1
1
1
2
6
1
-1
2
9
1
1
3
-1
10
10
-1
-2
2
4
2
4
1
1
4
7
10
1
7
9
1
6
1
3
10
4
2
5
3
4
6
-2
-2
1
2
1
10
3
-1
9
-3
2
1
-3
4
9
3
2
10
-2
3
-1
10
10
-2
-3
1
-2
-2
9
1
3
2
2
-2
2
-1
5
2
1
1
-1
5
9
-1
10
-1
2
-1
9
1
1
9
2
1
9
10
7
1
10
-1
1
1
10
2
5
2
10
4
10
1
10
-2
9
2
-2
3
5
2
4
3
2
10
8
1
-2
3
9
1
1
2
2
-1
3
5
3
9
4
9
1
10
10
-1
10
-3
3
10
10
1
3
2
9
1
9
1
2
2
10
1
9
2
2
9
1
4
5
10
1
-1
10
3
-1
1
-2
1
-2
3
10
1
2
10
9
1
9
1
10
9
9
-3
8
10
-2
3
-1
4
10
9
2
10
-1
-3
1
2
9
1
-1
-3
2
9
2
10
-3
-1
1
-3
-1
-1
1
1
-1
8
10
2
9
10
-1
3
-2
9
9
2
2
-2
-3
9
-1
5
3
1
9
4
-1
3
7
4
-3
3
3
3
-1
3
9
9
9
4
3
-1
-2
2
-2
1
-1
-3
1
9
-2
-1
10
4
5
1
9
2
-2
-1
1
-2
4
7
4
9
2
3
-1
10
9
2
3
2
5
-1
1
1
3
-3
4
-1
-2
9
4
9
1
4
-1
4
-2
-3
3
10
1
-2
-3
-2
2
5
-2
2
4
4
-3
-1
2
-1
1
1
9
4
-2
1
10
9
3
10
-2
-2
2
2
2
-2
-3
4
10
-1
9
-1
9
10
9
2
2
10
-2
10
10
6
9
-2
10
1
-1
-1
-1
-1
2
9
-3
4
-2
-3
3
9
2
1
10
1
9
9
1
1
-1
1
3
2
3
9
3
10
9
1
2
1
1
5
-1
2
9
1
-1
4
-1
1
9
9
10
-1
-1
9
-1
2
-2
-1
-2
2
2
4
10
1
2
2
-1
10
-2
5
4
10
1
3
-1
2
-1
9
10
-3
-3
1
3
1
-1
9
1
8
3
4
-2
2
1
9
-2
3
1
1
3
-2
7
2
2
6
1
-2
10
1
-1
5
-2
10
-1
4
6
9
9
1
4
4
10
1
10
-1
2
3
-2
3
2
4
1
10
-1
3
1
2
9
5
1
1
1
9
-2
-3
2
-1
1
9
10
1
-1
9
9
2
8
1
1
-1
3
10
-1
1
3
2
1
3
1
-2
10
10
3
2
-1
9
10
3
-3
10
9
10
7
10
2
4
10
4
10
-2
-1
1
-1
10
3
2
3
1
1
-2
9
2
9
3
9
7
9
1
3
10
1
10
-2
5
-2
-1
10
1
1
1
1
-2
2
1
10
10
10
-3
-1
5
3
7
1
10
-1
2
1
1
2
1
-1
3
2
5
10
3
10
2
-1
3
3
4
1
-3
10
9
9
10
9
-1
1
4
-2
1
10
3
9
9
4
3
-2
-3
10
6
2
10
2
-3
3
1
-1
9
9
-2
3
-2
9
10
8
3
3
-1
2
1
3
1
1
9
-1
3
2
10
1
5
10
2
2
1
-1
10
4
9
-1
5
9
1
1
-1
9
3
1
3
-1
10
10
-1
3
-1
2
10
1
3
1
-1
2
3
9
1
-2
3
1
10
7
2
3
-1
3
9
10
-2
9
1
3
2
1
-1
10
3
6
-2
9
2
10
-2
9
2
1
2
9
2
2
10
2
1
9
5
-2
9
-3
6
2
5
1
8
9
3
1
3
-1
3
9
10
-1
2
10
2
9
3
9
2
2
10
10
-3
2
-1
4
3
-1
3
-1
10
1
4
4
4
3
5
3
1
2
7
3
5
2
9
10
10
9
1
3
9
3
2
4
1
10
-1
10
1
3
4
2
1
1
2
2
-1
1
-3
9
2
9
3
4
-1
1
1
1
3
-1
1
9
9
9
2
2
-2
1
-3
-2
4
1
-3
1
3
1
-1
-1
10
3
1
4
10
1
-1
4
1
10
1
2
2
9
-2
-2
10
10
4
9
-2
-1
9
3
8
-1
-1
3
2
6
5
2
2
10
3
3
2
9
3
-2
9
9
-1
-2
-1
10
4
3
-1
2
10
1
2
1
-1
-1
1
10
9
-1
2
2
1
-1
-3
2
1
9
-2
1
2
1
5
3
9
10
10
3
1
3
9
-2
9
-3
9
-1
-1
4
3
3
7
7
2
1
-1
5
9
-1
-2
6
10
6
3
-2
-2
2
2
-2
-2
-2
1
2
-1
1
-1
1
9
9
3
3
-1
1
2
-1
5
1
10
-2
2
1
3
-3
-2
3
1
-1
2
2
10
7
-2
2
10
9
2
2
9
5
3
9
4
2
3
1
10
1
4
10
4
9
2
1
-2
-2
9
-3
6
-2
9
1
2
2
-1
9
1
1
9
2
3
10
2
5
1
-2
2
1
1
9
10
-2
9
6
-1
2
7
10
-2
10
1
1
-1
9
9
2
10
-2
10
1
9
4
10
2
1
10
6
2
10
3
9
-3
1
9
3
1
1
2
-1
10
-2
1
-2
9
9
-3
3
1
2
10
-2
4
2
10
-1
-2
2
7
10
5
4
1
2
-1
2
-1
10
3
-1
3
9
9
1
2
-2
1
-1
9
1
-3
4
-1
8
3
-1
10
-2
4
9
1
-3
-3
4
5
1
4
9
9
landlords3.out
2
11
-2
3
10
5
-1
10
-1
4
4
3
3
2
2
-1
10
10
1
-1
1
-1
-1
11
1
-4
-2
2
-2
-1
10
2
3
12
-1
1
-1
9
4
7
12
-2
-1
11
11
-1
2
-4
2
5
10
11
-2
10
-1
-2
-3
3
1
-3
5
1
-1
1
10
12
3
-2
1
-2
-2
1
-2
11
-2
2
12
1
1
-2
-1
1
1
-2
11
1
-1
-1
-1
11
12
1
-1
10
-2
-3
1
-2
3
11
4
-4
-1
-1
1
-2
10
10
-4
3
10
-1
-2
-1
9
-1
-2
11
2
10
-2
-3
-1
4
11
1
10
-2
11
2
11
12
12
10
-3
-1
1
-1
1
-1
-2
10
2
-2
8
-2
10
-1
11
2
-1
1
1
1
-1
-4
-2
-1
2
-1
-4
3
11
-2
12
1
-3
1
2
1
-4
-1
-2
-3
-1
-1
2
1
2
1
1
-1
3
-3
2
-3
-3
-1
-2
-2
11
-4
-2
-3
5
-2
10
12
-2
1
3
2
11
1
-3
-3
12
10
2
12
-1
2
2
12
11
12
10
1
2
11
-1
12
3
12
-1
3
-1
-1
-1
11
11
1
4
12
4
10
-2
2
1
-1
1
-1
10
3
-2
2
2
12
12
3
11
12
-3
6
1
-2
12
5
3
1
4
-2
3
-2
1
3
12
-1
12
1
11
4
-3
12
12
-1
2
2
2
11
-1
2
1
-1
10
-2
2
11
-3
-2
-2
-2
3
2
1
10
-1
-1
3
-1
1
1
1
-1
10
1
11
-1
-2
-1
-3
-2
-2
11
-2
2
-1
1
11
-2
1
4
-1
11
2
10
2
6
-2
10
11
1
12
4
-2
-2
-1
5
5
1
-2
11
-1
1
-1
11
8
9
-2
1
2
11
-3
-1
10
1
-1
1
1
1
11
3
4
2
1
12
11
11
-4
-2
10
1
4
5
2
12
1
10
-1
-1
-1
-2
-4
2
-1
-2
1
1
2
1
-3
1
10
1
12
1
-1
1
3
-1
10
11
10
4
-1
-1
-2
2
1
-3
-2
-3
-3
-1
12
-3
-1
12
3
-1
10
10
-2
-2
-2
-1
12
3
10
2
10
4
12
-1
2
12
11
11
10
1
12
2
-3
-3
-1
3
-2
11
11
2
-1
1
-3
1
10
-1
2
-1
2
11
-2
3
-2
11
1
4
-1
3
1
-1
12
-3
1
12
12
-1
3
3
4
-1
1
-1
-2
2
1
12
-1
-3
2
6
-1
-2
2
-1
12
1
-4
10
-3
2
-2
-1
10
1
-2
12
11
-3
1
3
5
-1
12
-3
11
10
-2
-1
12
-1
11
-1
-1
-1
10
12
12
1
-2
2
4
12
3
11
12
-1
3
-1
4
3
-1
12
-1
11
-2
1
-1
10
3
11
-1
10
1
-1
-1
-1
-2
-2
1
-3
-3
2
3
10
1
11
-4
12
3
-2
-3
-2
12
-1
1
-1
11
11
-1
10
11
10
-1
-2
-4
-1
1
4
-3
3
2
-3
10
2
-2
10
10
2
-4
11
12
-3
4
-1
11
3
-4
1
-1
-3
10
11
-3
1
-1
-3
11
1
10
2
-1
-3
-1
-1
-1
-1
1
12
10
11
1
3
-2
2
-2
2
1
10
2
-1
10
-1
-1
4
-1
1
11
11
1
-2
1
1
-2
2
2
3
2
1
3
-3
-1
1
1
-3
-1
-1
1
-2
3
-1
1
3
3
2
1
12
10
3
11
-3
1
12
-1
11
4
2
1
2
10
11
1
-3
1
12
11
-3
2
-2
-3
11
3
2
12
2
-1
3
1
11
-3
7
-1
2
-1
1
1
-1
12
1
12
-4
10
12
-3
12
-3
1
2
11
-3
-2
2
11
12
-4
9
12
-4
-3
11
12
1
11
11
11
-1
-2
-2
3
2
-1
3
-1
-2
4
-4
-2
-2
12
-3
3
1
-2
-1
-1
12
1
3
-1
-2
12
1
1
-2
-1
1
2
1
-2
3
12
-1
11
1
1
11
12
-2
2
12
1
11
5
1
-3
3
-2
3
-2
10
10
-2
1
-3
-1
1
3
10
3
-2
-1
10
-1
1
-1
2
-2
-3
-2
4
2
12
-2
2
-2
12
-1
10
-1
2
-1
10
1
12
11
-3
-3
-1
12
2
1
1
10
-2
11
12
-2
11
3
1
10
-1
1
-2
10
-3
11
11
11
11
-2
1
-1
-2
2
10
11
-3
-3
-1
-1
11
6
5
1
3
-3
3
12
-3
12
12
11
1
2
-3
11
-2
1
-4
1
-3
-1
7
2
3
2
1
3
-1
-3
2
3
-3
1
-1
5
4
-1
-1
11
-1
5
-1
3
2
1
-2
11
3
-1
4
1
-1
-1
-2
1
1
12
4
-2
-1
1
-1
10
1
-2
1
3
-2
-4
1
-1
12
12
10
-1
-1
10
1
1
4
10
3
3
10
11
10
-4
-4
-1
-1
-2
-1
2
-2
2
4
-1
9
-1
-3
1
-2
2
-4
12
-1
2
11
11
-2
12
1
10
10
-2
-1
5
1
5
11
4
-2
2
-3
-1
10
-2
3
-3
12
11
1
-2
2
11
-1
12
5
12
1
3
10
10
-3
-2
12
11
-2
1
3
4
1
-1
12
1
3
-1
-1
-1
2
12
2
11
-2
-3
10
-4
-1
-1
10
1
-1
10
-2
-2
-2
-1
2
1
-3
-2
-2
12
2
1
10
3
-1
1
-2
1
-2
-1
-1
3
2
1
1
-1
-4
-3
10
-1
-2
1
4
-1
2
5
-4
3
-4
4
1
1
11
12
11
2
-3
-1
12
1
12
12
3
11
4
5
-1
-1
1
1
1
-2
2
12
1
11
3
12
12
-1
12
1
-1
4
3
7
11
12
-2
11
2
-1
-4
11
-2
12
3
11
-1
3
2
-4
1
2
3
10
2
2
3
-1
11
2
-1
-1
-1
-1
10
10
2
3
3
-2
10
-3
1
-2
11
11
12
2
2
10
1
11
2
11
3
12
10
3
11
-3
10
1
-3
-1
11
1
-1
3
12
2
-1
11
-1
-2
1
4
-1
3
-1
-1
-1
-3
12
-3
12
-3
-2
-2
10
3
-1
2
-1
2
2
2
-2
-1
6
1
-3
-3
10
11
1
2
-1
-1
2
4
3
-2
-2
10
3
1
2
10
11
2
10
1
-1
-1
9
12
1
9
1
-2
1
2
-2
1
-3
-1
3
-2
11
-2
1
-2
-3
1
-2
1
-2
12
3
-1
10
1
10
10
12
3
3
1
-1
-4
-2
3
2
-2
12
-3
12
12
-3
-1
12
12
4
-1
-2
-1
1
-2
3
2
10
-2
-1
4
1
1
2
-1
-2
12
-2
-2
3
-1
1
-4
11
-1
2
1
-1
4
-2
10
-2
2
3
-3
1
4
1
-1
10
-2
-4
1
2
12
-4
11
-1
1
11
3
11
7
2
-1
2
2
4
-2
1
-2
4
12
-1
11
-1
-1
12
12
1
-3
1
1
11
-2
11
2
1
11
1
10
4
12
-3
5
10
-2
-1
1
-2
4
11
2
2
-1
-1
-2
1
-2
2
3
1
1
-2
11
-2
2
5
11
3
2
-1
12
2
3
1
12
1
-1
-1
10
1
5
1
-2
11
2
12
-4
2
1
-1
10
-1
-2
2
-3
-3
-2
1
-1
-1
8
-4
4
11
12
12
-4
10
1
9
2
11
1
-3
10
-4
-1
12
5
-2
1
11
-2
1
3
-4
10
-3
-3
-2
11
-4
-2
5
3
-2
4
3
4
4
1
3
12
1
10
4
1
-1
5
-3
3
12
5
10
-1
1
-1
3
12
-1
-2
12
1
9
10
-1
1
-1
2
1
3
1
10
2
-1
-2
5
-1
2
1
-1
12
-3
10
3
3
12
-3
3
1
12
4
3
-2
-3
-1
-4
-3
12
-2
-2
-1
-2
-2
-3
-3
-1
12
10
5
4
-1
1
-3
12
12
2
3
2
4
-2
3
-2
-2
11
12
-1
3
-4
3
-1
10
11
10
-4
11
3
3
-1
12
-1
-3
-1
12
11
10
9
-1
-3
3
1
1
-1
1
-2
-2
-3
1
4
1
3
1
2
-1
-1
3
1
11
12
3
-1
-1
-3
1
-2
3
-1
-1
2
-2
-4
11
2
4
1
12
-1
-2
-1
3
10
10
12
12
11
10
2
2
1
-2
-2
11
10
-3
12
12
9
-3
2
-4
10
-3
12
-2
-2
11
3
10
-1
11
5
1
1
-2
-2
12
2
-1
3
3
-1
12
11
2
1
1
9
4
1
10
12
3
12
-2
-3
-1
12
5
1
3
3
-4
2
11
3
3
4
-1
3
12
-3
-1
-1
-1
8
9
1
-3
4
-2
11
-2
-1
5
-1
-1
1
-3
-1
10
2
3
11
11
-2
-1
-2
1
12
3
12
12
4
2
1
3
-3
2
12
-2
-1
1
10
-1
-2
-3
10
2
1
1
-1
-3
4
1
1
11
12
-2
1
-1
-2
-3
12
11
2
2
1
1
2
12
12
10
11
-4
-4
1
-1
3
-3
-2
10
12
4
3
-2
10
11
11
1
-1
-3
3
-3
8
11
1
2
11
11
1
12
-2
2
4
11
11
2
11
-2
2
-2
10
1
-3
-2
12
-2
10
-2
-1
-2
-2
-1
1
2
-4
11
11
-2
12
-1
2
12
4
11
3
9
11
12
11
10
2
1
-2
-1
12
9
10
-1
-2
10
10
-2
2
12
1
3
3
4
4
-1
-2
3
-2
10
12
1
2
-1
-2
-3
-2
-2
12
-2
11
1
-1
5
1
2
1
5
11
1
1
1
2
4
-2
12
1
5
-1
2
4
1
1
1
2
-1
11
12
11
-2
-2
-2
-1
2
11
-3
5
-4
-1
3
-2
12
11
-3
10
-2
3
-1
-2
-3
12
-1
1
-1
3
-2
8
5
9
10
-2
-1
-1
11
11
12
-3
-1
11
11
10
10
-1
-3
4
12
-1
2
-3
12
11
5
1
12
3
2
1
-4
-3
-4
-1
11
11
-1
11
4
1
11
-3
1
1
11
-1
1
1
12
3
1
1
1
2
-1
-1
11
-1
-2
11
10
11
4
-3
-3
11
-4
-2
-1
12
-2
-1
10
10
1
-1
11
10
-3
-2
3
2
2
4
10
2
-1
-1
1
10
3
1
2
-3
2
4
12
12
2
-2
4
1
3
1
2
1
1
-1
-1
2
1
3
-4
10
-2
-3
8
-2
1
12
-4
3
4
8
1
landlords4.out
-4
-3
1
-2
-3
1
1
-4
-1
-1
-3
1
15
-2
-3
16
-1
-2
15
-2
-1
-3
2
-1
-2
16
-1
-2
1
3
-2
-4
14
1
-4
-1
-2
6
3
16
1
-1
-2
-4
1
-3
1
-1
4
16
2
-1
-2
-1
1
-1
-1
1
16
-1
3
14
-4
-1
-1
14
1
-3
-1
-1
-4
-2
3
-2
16
-1
2
14
-2
-2
-1
-1
-3
-3
-2
1
-3
16
-4
-1
-3
14
5
3
-1
14
14
-2
-3
4
-2
3
14
1
2
15
-3
16
-3
-1
-1
-2
-1
-4
16
14
-2
16
-1
-1
3
2
-4
-2
-3
-2
1
-1
-2
2
-2
-1
-2
16
2
-1
-4
-1
-2
15
-2
4
1
-2
-1
16
-4
4
-1
14
-2
-4
-1
16
-2
16
14
2
-1
-2
1
2
1
-1
-3
15
1
-1
1
1
-4
-3
16
7
-1
-2
14
15
-1
-2
-1
16
-1
2
-4
3
-3
-1
-2
-3
14
-1
-2
16
14
-1
-3
15
-4
-1
2
-2
-2
-1
4
-4
-3
1
7
2
-4
11
-2
2
-2
-1
-3
-2
-4
-4
15
-1
6
3
14
-1
1
1
-1
-1
-3
-2
-3
-2
3
-1
14
2
5
16
1
1
3
-3
16
16
-2
-2
15
1
-1
-2
-1
-1
-2
14
-1
-3
-2
-1
-2
-2
-1
-1
2
15
-1
-1
16
-1
14
1
-1
14
1
15
-1
1
16
4
1
1
-1
3
-1
-3
-3
1
2
-1
14
-1
1
-1
-2
1
1
2
-1
1
-4
1
-1
-2
1
-1
4
-2
4
-3
-3
-3
16
16
2
3
-1
16
-1
-4
-2
1
15
14
1
-4
-4
2
-2
16
1
2
-2
1
-1
-1
16
4
1
-3
-3
-2
-1
-1
-3
-3
-4
-1
-1
-1
-1
-2
-3
3
6
-1
1
-1
-2
-1
-4
2
-1
6
1
3
-2
-1
-2
1
-3
-3
14
-2
-1
-1
-2
-3
-1
-2
-2
-1
15
1
15
1
15
-2
1
-4
14
-4
-1
-2
-2
2
1
1
15
16
-4
15
1
15
16
-1
-3
-1
16
-2
-2
-1
-2
-2
7
2
-4
-2
1
16
-1
-2
1
1
-1
14
16
6
1
-1
8
-2
4
-1
-4
1
2
-2
-1
-4
-1
6
-4
-1
-1
-2
14
1
1
-2
-2
-3
-3
-1
3
14
-1
-3
-1
2
2
15
15
-3
-3
-2
-2
-4
1
-4
15
-2
-3
-1
-2
8
-2
16
1
2
-2
-1
2
-4
15
-1
-4
15
15
-2
14
1
-2
-1
-4
-1
-2
1
16
16
-3
15
2
-1
2
-1
16
-1
-1
16
-3
1
-2
-4
1
-1
-2
-1
-1
-3
1
-3
-2
-3
-4
16
-3
14
-2
-3
-1
14
-4
3
-3
-1
-4
16
16
-1
-2
-2
-2
-2
-2
2
-3
5
-2
-1
14
-1
2
-3
14
-2
14
-2
-1
-3
16
-2
-1
-1
-1
-2
-2
15
15
1
-3
15
15
-3
-1
-2
-1
16
-3
15
-3
-1
14
-1
14
-3
16
-2
-3
-2
3
3
14
2
3
2
-2
-1
-3
-1
-3
1
-2
-3
-1
-2
-4
-2
2
1
-2
8
-1
2
-3
-2
1
-1
-1
14
-2
-2
14
-1
-2
-1
-1
-1
-1
1
-3
14
-1
16
1
-1
-2
-2
-1
-4
-1
-1
-2
-1
-3
-2
-3
-2
14
-2
12
-4
14
-2
-1
-1
15
4
-3
-1
-2
1
16
-3
15
-1
14
1
2
2
-4
3
-3
-1
16
-2
-1
-3
-1
3
-2
-4
-2
14
-3
-1
-2
-1
-1
-2
-1
3
-3
1
1
1
1
-2
-1
-3
-2
-1
12
-2
-2
-1
15
15
1
-1
15
3
3
-4
-3
-2
-1
-2
-1
-1
-1
-1
-4
-1
2
-3
-1
-2
-3
-1
-2
-2
-2
-4
-2
-1
14
-2
16
15
-2
-3
2
15
-4
15
1
-4
14
-4
-2
15
-1
-1
16
-1
-2
-2
-2
3
-4
-1
-1
1
2
14
14
-2
16
-2
1
-1
-3
16
-1
-1
2
-1
-3
-3
-2
1
-1
-3
2
-2
1
-3
-2
-1
-2
4
-1
-2
1
1
-1
15
-4
-1
-1
-1
14
2
-4
-1
-1
14
16
-4
2
-2
-1
-2
1
15
-1
1
-1
1
3
-1
5
15
1
-1
-2
14
-2
-3
-1
-1
-3
15
-2
14
3
-1
-2
3
1
-3
-1
14
-2
2
-1
-1
-1
-2
15
-2
15
7
1
16
-1
-2
-3
-1
-2
2
-2
16
16
-3
1
14
-1
-1
-2
-1
-2
-2
-1
1
-1
2
-1
4
-2
-1
-1
-4
3
-4
-1
-4
-2
-2
-4
-1
-2
-4
-1
-4
16
-3
4
-1
3
1
15
2
-1
1
-4
1
14
1
14
1
-2
-2
1
1
-2
3
-2
-3
-3
-4
16
-3
-2
1
-1
-2
-2
16
-2
-1
1
-3
-1
-2
-1
-3
-2
-1
-2
-1
-4
-1
-2
-1
4
-3
3
4
1
16
-2
-2
15
1
2
15
1
2
16
-3
-3
-1
-2
-1
16
-1
2
-2
3
-2
-4
1
2
16
-2
16
-1
2
16
-1
-2
-2
-2
-3
-1
-3
2
15
-3
-2
-2
-4
2
-1
-3
-1
1
1
-3
-1
1
-4
16
-2
1
-3
-3
-2
-4
1
-2
14
-3
-2
1
-1
16
-3
8
-1
14
-4
-1
-3
-4
1
-1
1
-2
1
-1
-2
-2
-2
-1
-3
-1
-2
-2
-1
-2
-1
1
4
-4
3
-3
14
-1
-1
14
1
1
1
-2
-1
1
-4
1
14
-1
-1
1
14
15
-1
-2
-3
-1
-3
1
15
-4
14
16
-2
-3
-3
15
-1
16
1
-3
-1
-1
-3
15
15
16
1
-2
1
-1
-1
3
-1
-1
-1
-2
-3
-1
16
15
14
-1
15
-1
16
-3
-2
14
8
-3
15
-1
-3
-3
-1
-1
-1
1
-2
15
1
-1
-3
1
-3
1
-4
-1
-4
-1
1
1
1
3
-3
1
-2
-3
-1
15
-2
16
-2
-2
-4
15
-1
-1
-4
-3
-1
-3
1
-3
-1
4
16
-4
7
2
-3
-1
-2
15
3
-3
-2
-2
-2
-1
-2
16
16
-2
1
-1
-1
-4
1
2
-3
1
-3
-1
1
4
2
-1
16
-2
15
-1
3
-2
-3
-1
2
-4
16
-2
-3
16
2
-3
-1
-1
-1
1
-1
-1
-2
3
1
-4
2
-3
-3
15
14
-1
16
-3
-4
-3
-2
-1
-4
1
-1
-1
-1
2
2
14
15
-1
-2
5
1
3
-3
-1
-3
-3
-3
-1
6
2
-1
-2
16
-2
1
-3
-1
-1
15
15
-3
-2
-3
-1
1
4
-4
-1
1
-1
3
1
-1
-1
-2
-3
-2
2
-2
14
-4
15
1
-3
-2
-2
-3
2
1
-3
-1
-2
3
1
1
-3
16
-1
-3
1
-1
-2
-2
16
-2
1
16
-2
-2
3
-1
4
-3
16
16
-2
1
1
5
-2
-4
14
15
16
-3
15
15
-3
14
16
-4
-1
-1
14
1
1
-1
-1
1
-3
15
-1
1
15
15
14
-1
14
-2
-2
-2
-3
-2
-3
-3
15
1
-2
-2
-1
-3
1
14
-4
-2
16
-2
16
-3
2
-1
14
-4
-2
-1
15
-3
-2
14
-1
-1
-2
1
-4
1
-3
1
14
1
-2
-1
-3
14
-1
-1
1
-1
14
-3
-2
-4
-1
16
-1
-3
-1
2
15
14
1
-1
16
1
-3
-3
-1
-4
-4
1
15
2
1
-1
-2
-3
2
-1
-3
-2
-2
16
-2
-1
-4
2
3
-3
-1
-3
1
1
-4
14
-1
-3
-4
1
1
-2
15
14
-2
-2
2
-1
-3
1
15
-1
-1
-3
-1
16
-2
-1
-2
-1
-1
13
-4
-4
14
-2
-1
2
2
-1
-1
-3
16
1
2
-1
-3
-3
2
-1
-2
1
-1
-1
14
-1
2
-1
-4
14
-2
2
-2
16
1
16
-4
-2
-2
2
-3
1
-4
-1
-2
-3
-1
15
-3
-1
-2
3
-1
-4
15
-4
-1
16
-1
-3
-1
2
1
-1
15
14
2
-2
14
16
-4
-1
1
-3
16
-3
-4
-4
1
14
16
1
2
15
-3
-3
15
2
5
2
1
4
-4
-3
-1
-3
-1
16
-2
-1
14
3
-2
-2
-1
-2
1
-1
-1
-2
1
7
-1
-1
1
-1
3
-2
-1
2
-1
2
-4
-2
16
-1
3
2
-1
3
16
-3
2
15
-4
-4
16
-1
-4
1
-1
16
16
1
-2
-3
-2
-4
-1
14
2
-3
1
14
-1
-2
2
-1
-3
-2
15
15
-1
-1
-1
-1
-2
-3
-3
1
-4
1
-2
2
-3
-1
-3
-3
-2
-3
-3
-2
-1
3
-2
-1
-1
1
2
-1
-1
-4
-1
-1
-1
1
-4
-1
-2
1
-3
-1
16
-1
1
-3
-1
-1
-1
-1
-2
14
14
-3
-1
-2
-1
-4
-1
1
-3
-2
1
-1
-3
14
15
1
-1
1
-1
-1
-4
-1
-3
-1
-3
1
-2
-3
15
-1
15
-1
1
2
-1
1
-3
-1
-2
-2
14
-2
-2
-1
16
16
-3
1
-1
-3
14
16
-2
-3
-2
-1
14
-3
-3
-3
-4
-2
-1
-4
1
3
1
-4
16
-2
-1
-3
-2
2
-4
-1
-1
14
2
-4
-2
-1
-2
-1
-1
-2
-3
1
-1
-4
-3
-1
-3
-4
-2
-4
15
-3
-2
16
-2
-2
15
-2
4
-2
1
-1
-4
-1
-1
-1
15
-3
1
-4
16
14
2
16
-2
-2
1
15
16
2
3
-1
16
14
2
15
14
1
-4
-4
16
-3
-2
2
-1
1
-3
-4
15
-4
-1
-3
14
-3
-2
-1
1
1
-1
2
-1
-1
-1
-1
15
-2
2
-3
-1
3
-2
16
-2
-4
16
15
14
-1
-2
1
14
-2
-3
-1
15
-1
-4
-4
-1
-2
-4
15
-1
-1
-3
-1
-1
16
-1
1
1
-2
-4
16
1
-2
-2
14
-1
14
15
1
-2
1
1
15
-1
-4
-3
-1
-1
2
14
-2
-2
-1
-1
15
-1
-1
-3
-4
-1
16
15
-1
14
-4
1
15
-1
1
-1
15
16
2
-2
-2
-3
-3
-3
-1
16
-2
-3
-2
-2
-2
-2
-1
-3
-2
-2
15
-2
1
1
1
-2
-3
-2
-1
-4
2
-3
-3
3
1
2
-1
-4
-3
-3
-3
3
1
-3
-3
-2
-2
1
-3
2
-3
-2
3
-3
1
1
1
1
-3
-3
1
-1
-2
-1
15
3
15
16
-2
-4
-3
-1
16
-3
15
1
12
-4
-2
-2
-2
-3
2
1
2
3
-1
14
-1
-3
2
-3
1
16
-4
-1
-3
16
-2
-1
-1
-4
2
-1
-4
1
-3
-2
-3
1
-3
15
-1
15
-2
1
-4
2
14
-1
-4
2
15
-1
-1
-1
-1
landlords5.out
AWSL
以上是关于[UOJ 160][清华集训2015]斗地主的主要内容,如果未能解决你的问题,请参考以下文章