from axelrod.lIlIIlIIIIIIIl import Action
from axelrod.player import Player
IlIIlIllIllIIIlIllI, IIllIlllllIIIl = Action.C, Action.D
def lllllIIlll(llIlllIIIl, IlIlllIIlI, lllIIIIIlIlIllIlII, IllIIIIlllI):
    return {(IlIIlIllIllIIIlIllI, IlIIlIllIllIIIlIllI): llIlllIIIl, (IlIIlIllIllIIIlIllI, IIllIlllllIIIl): IlIlllIIlI, (IIllIlllllIIIl, IlIIlIllIllIIIlIllI): lllIIIIIlIlIllIlII, (IIllIlllllIIIl, IIllIlllllIIIl): IllIIIIlllI}
def IllIlIlIllIIIlII(lIlIIlIIIIIIIl):
    if lIlIIlIIIIIIIl == IlIIlIllIllIIIlIllI:
        return 1
    return 0
def IllIlIIlIll(lIlIIllIlllllllII, IIlIllIII, lIIIIIIlllIlI):
    if lIlIIllIlllllllII.llllllII():
        lIIlIIlI = lIlIIllIlllllllII.lIIlIlIIlIll()
        IIIIllIlIlIllllI = lIlIIllIlllllllII.IlIllIllllIIIIIlll * IllIlIIlIll(
            lIIlIIlI[0], IIlIllIII, lIIIIIIlllIlI
        ) + (1 - lIlIIllIlllllllII.IlIllIllllIIIIIlll) * IllIlIIlIll(
            lIIlIIlI[1], IIlIllIII, lIIIIIIlllIlI
        )
        return IIIIllIlIlIllllI
    else:  
        if lIlIIllIlllllllII.IIIIllllIlIlII == lIIIIIIlllIlI:
            return lIlIIllIlllllllII.get_value()
        elif lIlIIllIlllllllII.IIIIllllIlIlII == 0:
            lIIlIIlI = lIlIIllIlllllllII.lIIlIlIIlIll(IIlIllIII)
            return (
                IllIlIIlIll(lIIlIIlI[0], IIlIllIII, lIIIIIIlllIlI)
                + lIlIIllIlllllllII.get_value(),
                IllIlIIlIll(lIIlIIlI[1], IIlIllIII, lIIIIIIlllIlI)
                + lIlIIllIlllllllII.get_value(),
            )
        elif lIlIIllIlllllllII.IIIIllllIlIlII < lIIIIIIlllIlI:
            lIIlIIlI = lIlIIllIlllllllII.lIIlIlIIlIll(IIlIllIII)
            lllllIlIlIll = IllIlIIlIll(lIIlIIlI[0], IIlIllIII, lIIIIIIlllIlI)
            IlIIIlllI = IllIlIIlIll(lIIlIIlI[1], IIlIllIII, lIIIIIIlllIlI)
            IIIIllIlIlIllllI = max(lllllIlIlIll, IlIIIlllI) + lIlIIllIlllllllII.get_value()
            return IIIIllIlIlIllllI
def IlIIIlIIll(llIllIII, IIlIllIII, lIlllIIIlIIllI=5):
    IlIllllllIllIllIII = DeterministicNode(llIllIII[0], llIllIII[1], IIIIllllIlIlII=0)
    lIIllIlIIIlIIlIII = IllIlIIlIll(
        IlIllllllIllIllIII, IIlIllIII, lIlllIIIlIIllI
    )
    IIIIIIIIllIIIlIl = (IlIIlIllIllIIIlIllI, IIllIlllllIIIl)
    return IIIIIIIIllIIIlIl[lIIllIlIIIlIIlIII.index(max(lIIllIlIIIlIIlIII))]
class llIlIIIlIIlIlllIllIl(object):
    def lIIlIlIIlIll(lllIIlIIlIIlIlI):
        raise NotImplementedError("subclasses must override get_siblings()!")
    def llllllII(lllIIlIIlIIlIlI):
        raise NotImplementedError("subclasses must override is_stochastic()!")
class IlIIIlIlllIIIIlIlll(llIlIIIlIIlIlllIllIl):
    def __init__(lllIIlIIlIIlIlI, IllllIIIIIIIllll, IlIllIllllIIIIIlll, IIIIllllIlIlII):
        lllIIlIIlIIlIlI.IlIllIllllIIIIIlll = IlIllIllllIIIIIlll
        lllIIlIIlIIlIlI.IIIIllllIlIlII = IIIIllllIlIlII
        lllIIlIIlIIlIlI.IllllIIIIIIIllll = IllllIIIIIIIllll
    def lIIlIlIIlIll(lllIIlIIlIIlIlI):
        IlIIlllIll = DeterministicNode(
            lllIIlIIlIIlIlI.IllllIIIIIIIllll, IlIIlIllIllIIIlIllI, lllIIlIIlIIlIlI.IIIIllllIlIlII + 1
        )
        lIIIIIIlIIIIllI = DeterministicNode(
            lllIIlIIlIIlIlI.IllllIIIIIIIllll, IIllIlllllIIIl, lllIIlIIlIIlIlI.IIIIllllIlIlII + 1
        )
        return IlIIlllIll, lIIIIIIlIIIIllI
    def llllllII(lllIIlIIlIIlIlI):
        return True