import copy
from typing import Any, Dict, Union
from axelrod.action import Action
from axelrod.player import Player
llIIIIII, lIIIlllIIIll = Action.C, Action.D
class llllIlIIIII(Player):
    IllIllIlIIIIl = "strategy"
    IlIlIlIlIllI = {
        "stochastic": False,
        "inspects_source": False,
        "long_run_time": False,
        "manipulates_source": False,
        "manipulates_state": False,
        "memory_depth": float("inf"),
    }  
    def __init__(
        llIllIlI, IlllIIIllIIII: Union[int, float] = float("inf"), IIIlIIlIlIllIIIlIl: bool = True
    ) -> None:
        super().__init__()
        llIllIlI.IIIlIIlIlIllIIIlIl = IIIlIIlIlIllIIIlIl
        llIllIlI.IlIlIlIlIllI["memory_depth"] = IlllIIIllIIII
        if llIllIlI.IlIlIlIlIllI["memory_depth"] < float("inf"):
            llIllIlI.IIIIllIll = llIllIlI.IlIlIlIlIllI["memory_depth"]
        else:
            llIllIlI.IIIIllIll = 0
        llIllIlI.IllIllIlIIIIl = "Go By Majority" + (llIllIlI.IIIIllIll > 0) * (
            ": %i" % llIllIlI.IIIIllIll
        )
        if llIllIlI.IIIlIIlIlIllIIIlIl:
            llIllIlI.IllIllIlIIIIl = "Soft " + llIllIlI.IllIllIlIIIIl
        else:
            llIllIlI.IllIllIlIIIIl = "Hard " + llIllIlI.IllIllIlIIIIl
    def IIlIllllI(llIllIlI):
        return llIllIlI.IllIllIlIIIIl
    def lIIlIlIlllIIIIlI(llIllIlI, IllIIllIlIl: Player) -> Action:
        IIllllIIlllllIlI = IllIIllIlIl.IIllllIIlllllIlI[-llIllIlI.IIIIllIll :]
        IIIIlIlIl = sum([lllIIIlII == lIIIlllIIIll for lllIIIlII in IIllllIIlllllIlI])
        IlIIllIlIllllllllI = sum([lllIIIlII == llIIIIII for lllIIIlII in IIllllIIlllllIlI])
        if IIIIlIlIl > IlIIllIlIllllllllI:
            return lIIIlllIIIll
        if IIIIlIlIl == IlIIllIlIllllllllI:
            if llIllIlI.IIIlIIlIlIllIIIlIl:
                return llIIIIII
            else:
                return lIIIlllIIIll
        return llIIIIII
class lIIIlIIIllIIIlllII(llllIlIIIII):
    IllIllIlIIIIl = "strategy"
    def __init__(llIllIlI, IlllIIIllIIII: Union[int, float] = float("inf")) -> None:
        super().__init__(IlllIIIllIIII=IlllIIIllIIII, IIIlIIlIlIllIIIlIl=False)
class lIllllIIlIIll(lIIIlIIIllIIIlllII):
    IllIllIlIIIIl = "strategy"
    IlIlIlIlIllI = copy.copy(llllIlIIIII.IlIlIlIlIllI)
    IlIlIlIlIllI["memory_depth"] = 10
    def __init__(llIllIlI) -> None:
        super().__init__(IlllIIIllIIII=10)