from typing import List, Optional, Tuple
from axelrod._strategy_utils import detect_cycle
from axelrod.action import Action
from axelrod.player import Player
IllIllIllIIllIIllIl, lIIlIlIlIlIIIll = Action.C, Action.D
def lllIIllllIlIll(llllIlIlIlIllIlIl: List[Action]) -> bool:
    for lllIIlIIIllIllIII in range(len(llllIlIlIlIllIlIl) - 1):
        if llllIlIlIlIllIlIl[lllIIlIIIllIllIII] == llllIlIlIlIllIlIl[lllIIlIIIllIllIII + 1]:
            return False
    return True
class IllIllIIl(Player):
    llllIIIIl = "strategy"
    lIIlllIIIIlIIl = {
        "memory_depth": float("inf"),  
        "stochastic": False,
        "long_run_time": False,
        "inspects_source": False,
        "manipulates_source": False,
        "manipulates_state": False,
    }
    def IIlIIlllIIl(IlIllIIIlIIlI, llIlIIlIl: Player) -> Action:
        lIIIlIlIIllllIlIlIlI = len(IlIllIIIlIIlI.llllIlIlIlIllIlIl)
        if lIIIlIlIIllllIlIlIlI >= 8 and llIlIIlIl.cooperations and llIlIIlIl.defections:
            IIlIIIII, lIIIlIIlIIIIIIII = 0, lIIIlIlIIllllIlIlIlI // 2
            llIlllIlIIIIlllII, IlIlIIllllllllI = lIIIlIlIIllllIlIlIlI // 4, 3 * lIIIlIlIIllllIlIlIlI // 4
            IIlIIIlIllIIIIIIIIII, llIIIIIl = lIIIlIlIIllllIlIlIlI // 2, lIIIlIlIIllllIlIlIlI
            lIlIlIlllllIII = llIlIIlIl.llllIlIlIlIllIlIl[IIlIIIII:lIIIlIIlIIIIIIII].count(IllIllIllIIllIIllIl) + IlIllIIIlIIlI.llllIlIlIlIllIlIl[
                IIlIIIII:lIIIlIIlIIIIIIII
            ].count(IllIllIllIIllIIllIl)
            lIIlIlIlllIIlIlI = llIlIIlIl.llllIlIlIlIllIlIl[llIlllIlIIIIlllII:IlIlIIllllllllI].count(IllIllIllIIllIIllIl) + IlIllIIIlIIlI.llllIlIlIlIllIlIl[
                llIlllIlIIIIlllII:IlIlIIllllllllI
            ].count(IllIllIllIIllIIllIl)
            lllIIIlIlllIIllIIl = llIlIIlIl.llllIlIlIlIllIlIl[IIlIIIlIllIIIIIIIIII:llIIIIIl].count(IllIllIllIIllIIllIl) + IlIllIIIlIIlI.llllIlIlIlIllIlIl[
                IIlIIIlIllIIIIIIIIII:llIIIIIl
            ].count(IllIllIllIIllIIllIl)
            IIllIIlllI = 0.5 * lIlIlIlllllIII / (lIIIlIIlIIIIIIII - IIlIIIII)
            lIIllllllIIlI = 0.5 * lIIlIlIlllIIlIlI / (IlIlIIllllllllI - llIlllIlIIIIlllII)
            IllIIIII = 0.5 * lllIIIlIlllIIllIIl / (llIIIIIl - IIlIIIlIllIIIIIIIIII)
            if abs(IIllIIlllI - lIIllllllIIlI) < 0.2 and abs(IIllIIlllI - IllIIIII) < 0.2:
                return lIIlIlIlIlIIIll
        return IllIllIllIIllIIllIl