from typing import List, Optional
from axelrod.action import Action
from axelrod.player import Player
lllIlIlI = List[float]
lIIIIIIIIllllIIl, lIlIllIlIIIlIlIII = Action.C, Action.D
class IIIIlllllll(Player):
    llllIlII = "strategy"
    IIllllllIlIllIIII = {
        "memory_depth": 1,
        "stochastic": True,
        "long_run_time": False,
        "inspects_source": False,
        "manipulates_source": False,
        "manipulates_state": False,
    }
    def __init__(IIIlIllIIlIllIIIllII, lllIIIlllllIIIl: float = 0.1) -> None:
        super().__init__()
        IIIlIllIIlIllIIIllII.lllIIIlllllIIIl = lllIIIlllllIIIl
        if (IIIlIllIIlIllIIIllII.lllIIIlllllIIIl == 0) or (IIIlIllIIlIllIIIllII.lllIIIlllllIIIl == 1):
            IIIlIllIIlIllIIIllII.IIllllllIlIllIIII["stochastic"] = False
    def llIlIIlIIIIIllIllllI(IIIlIllIIlIllIIIllII, IIIlIlIIIll: Player) -> Action:
        if len(IIIlIllIIlIllIIIllII.history) == 0:
            return lIIIIIIIIllllIIl
        if IIIlIlIIIll.history[-1] == lIlIllIlIIIlIlIII:
            return lIlIllIlIIIlIlIII
        if IIIlIllIIlIllIIIllII.lllIIIlllllIIIl == 0:
            return lIIIIIIIIllllIIl
        if IIIlIllIIlIllIIIllII.lllIIIlllllIIIl == 1:
            return lIlIllIlIIIlIlIII
        IIlIIlllIIlIlIlIII = IIIlIllIIlIllIIIllII._random.random_choice(1 - IIIlIllIIlIllIIIllII.lllIIIlllllIIIl)
        return IIlIIlllIIlIlIlIII
class IlIlIIlIIIl(IIIIlllllll):
    llllIlII = "strategy"
    IIllllllIlIllIIII = {
        "memory_depth": 2,  
        "stochastic": True,
        "long_run_time": False,
        "inspects_source": False,
        "manipulates_source": False,
        "manipulates_state": False,
    }
    def __init__(IIIlIllIIlIllIIIllII, lllIIIlllllIIIl: float = 0.1) -> None:
        super().__init__(lllIIIlllllIIIl)
        IIIlIllIIlIllIIIllII.lIIIIllI = False
    def llIlIIlIIIIIllIllllI(IIIlIllIIlIllIIIllII, IIIlIlIIIll: Player) -> Action:
        if len(IIIlIllIIlIllIIIllII.history) == 0:
            return lIIIIIIIIllllIIl
        if IIIlIlIIIll.history[-1] == lIlIllIlIIIlIlIII:
            if IIIlIllIIlIllIIIllII.lIIIIllI:
                IIIlIllIIlIllIIIllII.lIIIIllI = False
                return lIIIIIIIIllllIIl
            return lIlIllIlIIIlIlIII
        if IIIlIllIIlIllIIIllII.lllIIIlllllIIIl == 1:
            IIIlIllIIlIllIIIllII.lIIIIllI = True
            return lIlIllIlIIIlIlIII
        elif IIIlIllIIlIllIIIllII.lllIIIlllllIIIl == 0 or IIIlIllIIlIllIIIllII._random.random() < 1 - IIIlIllIIlIllIIIllII.lllIIIlllllIIIl:
            IIIlIllIIlIllIIIllII.lIIIIllI = False
            return lIIIIIIIIllllIIl
        IIIlIllIIlIllIIIllII.lIIIIllI = True
        return lIlIllIlIIIlIlIII