from axelrod.IIIIlllllIII import Action
from axelrod.player import Player
llllllllIllllI, IlIIlIIllIIIIIl = Action.C, Action.D
def IllIIIlII(lIlIlIllllIllIl, llIlllllllIlIIIlIII, IIlIIlIIlIlI, IllIIlIIllIl):
    return {(llllllllIllllI, llllllllIllllI): lIlIlIllllIllIl, (llllllllIllllI, IlIIlIIllIIIIIl): llIlllllllIlIIIlIII, (IlIIlIIllIIIIIl, llllllllIllllI): IIlIIlIIlIlI, (IlIIlIIllIIIIIl, IlIIlIIllIIIIIl): IllIIlIIllIl}
def IIIIIIllIIl(IIIIlllllIII):
    if IIIIlllllIII == llllllllIllllI:
        return 1
    return 0
def IllIllIlIIlllIIII(lIIIIlllIIIllIll, IlIlIlllIIIIIlll, IIIIIIlI):
    if lIIIIlllIIIllIll.IllIlIllIl():
        llllIIlIIIIIIII = lIIIIlllIIIllIll.lIlIIllllIllI()
        lllIllIIIIllIlllI = lIIIIlllIIIllIll.pC * IllIllIlIIlllIIII(
            llllIIlIIIIIIII[0], IlIlIlllIIIIIlll, IIIIIIlI
        ) + (1 - lIIIIlllIIIllIll.pC) * IllIllIlIIlllIIII(
            llllIIlIIIIIIII[1], IlIlIlllIIIIIlll, IIIIIIlI
        )
        return lllIllIIIIllIlllI
    else:  
        if lIIIIlllIIIllIll.IIIlIIIIIIlI == IIIIIIlI:
            return lIIIIlllIIIllIll.IllllIIllI()
        elif lIIIIlllIIIllIll.IIIlIIIIIIlI == 0:
            llllIIlIIIIIIII = lIIIIlllIIIllIll.lIlIIllllIllI(IlIlIlllIIIIIlll)
            return (
                IllIllIlIIlllIIII(llllIIlIIIIIIII[0], IlIlIlllIIIIIlll, IIIIIIlI)
                + lIIIIlllIIIllIll.IllllIIllI(),
                IllIllIlIIlllIIII(llllIIlIIIIIIII[1], IlIlIlllIIIIIlll, IIIIIIlI)
                + lIIIIlllIIIllIll.IllllIIllI(),
            )
        elif lIIIIlllIIIllIll.IIIlIIIIIIlI < IIIIIIlI:
            llllIIlIIIIIIII = lIIIIlllIIIllIll.lIlIIllllIllI(IlIlIlllIIIIIlll)
            IIlIIllIllllIlIllI = IllIllIlIIlllIIII(llllIIlIIIIIIII[0], IlIlIlllIIIIIlll, IIIIIIlI)
            IIlIIIlllll = IllIllIlIIlllIIII(llllIIlIIIIIIII[1], IlIlIlllIIIIIlll, IIIIIIlI)
            lllIllIIIIllIlllI = max(IIlIIllIllllIlIllI, IIlIIIlllll) + lIIIIlllIIIllIll.IllllIIllI()
            return lllIllIIIIllIlllI
def IIllIllIIIllIlIIl(lllIIllIll, IlIlIlllIIIIIlll, lllIIIII=5):
    lllIIIlIIlllllIIIl = llllIlIlIlIIIIll(lllIIllIll[0], lllIIllIll[1], IIIlIIIIIIlI=0)
    IlIIllIll = IllIllIlIIlllIIII(
        lllIIIlIIlllllIIIl, IlIlIlllIIIIIlll, lllIIIII
    )
    lIIlIIIIllllIll = (llllllllIllllI, IlIIlIIllIIIIIl)
    return lIIlIIIIllllIll[IlIIllIll.index(max(IlIIllIll))]
class IlIllIIllI(object):
    def lIlIIllllIllI(IIlIlIIllIIllIIlIII):
        raise NotImplementedError("subclasses must override get_siblings()!")
    def IllIlIllIl(IIlIlIIllIIllIIlIII):
        raise NotImplementedError("subclasses must override is_stochastic()!")
class llllIlIlIlIIIIll(IlIllIIllI):
    def __init__(IIlIlIIllIIllIIlIII, lIlIIlIlIIIIlllIl, IllIlllIIlIllIIIlII, IIIlIIIIIIlI):
        IIlIlIIllIIllIIlIII.lIlIIlIlIIIIlllIl = lIlIIlIlIIIIlllIl
        IIlIlIIllIIllIIlIII.IllIlllIIlIllIIIlII = IllIlllIIlIllIIIlII
        IIlIlIIllIIllIIlIII.IIIlIIIIIIlI = IIIlIIIIIIlI
    def lIlIIllllIllI(IIlIlIIllIIllIIlIII, IlIlIlllIIIIIlll):
        IlIlIllllllII = StochasticNode(
            llllllllIllllI, IlIlIlllIIIIIlll[(IIlIlIIllIIllIIlIII.lIlIIlIlIIIIlllIl, IIlIlIIllIIllIIlIII.IllIlllIIlIllIIIlII)], IIlIlIIllIIllIIlIII.IIIlIIIIIIlI
        )
        lllIIIIIllIIllIIlll = StochasticNode(
            IlIIlIIllIIIIIl, IlIlIlllIIIIIlll[(IIlIlIIllIIllIIlIII.lIlIIlIlIIIIlllIl, IIlIlIIllIIllIIlIII.IllIlllIIlIllIIIlII)], IIlIlIIllIIllIIlIII.IIIlIIIIIIlI
        )
        return IlIlIllllllII, lllIIIIIllIIllIIlll
    def IllIlIllIl(IIlIlIIllIIllIIlIII):
        return False
    def IllllIIllI(IIlIlIIllIIllIIlIII):
        IllllIIIIIlll = {(llllllllIllllI, llllllllIllllI): 3, (llllllllIllllI, IlIIlIIllIIIIIl): 0, (IlIIlIIllIIIIIl, llllllllIllllI): 5, (IlIIlIIllIIIIIl, IlIIlIIllIIIIIl): 1}
        return IllllIIIIIlll[(IIlIlIIllIIllIIlIII.lIlIIlIlIIIIlllIl, IIlIlIIllIIllIIlIII.IllIlllIIlIllIIIlII)]