[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]斗地主的主要内容,如果未能解决你的问题,请参考以下文章

UOJ #164 清华集训2015 V

uoj#164. 清华集训2015V

[uoj164][清华集训2015]V——线段树

[BZOJ4730][清华集训2016][UOJ266] Alice和Bob又在玩游戏

UOJ#46. 清华集训2014玄学

AC日记——清华集训2014奇数国 uoj 38