import copy
from typing import Any, Dict, Union
from axelrod.action import Action
from axelrod.player import Player
IllllIlIlIIIlI, lIlllIIIlIllllIlII = Action.C, Action.D
class IIIlIIllIlIlI(Player):
    llllllIIIIIllIl = "strategy"
    lIIlIIIlIllI = {
        "stochastic": False,
        "inspects_source": False,
        "long_run_time": False,
        "manipulates_source": False,
        "manipulates_state": False,
        "memory_depth": float("inf"),
    }  
    def __init__(
        lIIIIlIlllIll, llIIlllIIllll: Union[int, float] = float("inf"), lIIIIIIIlIlIllIllIl: bool = True
    ) -> None:
        super().__init__()
        lIIIIlIlllIll.lIIIIIIIlIlIllIllIl = lIIIIIIIlIlIllIllIl
        lIIIIlIlllIll.lIIlIIIlIllI["memory_depth"] = llIIlllIIllll
        if lIIIIlIlllIll.lIIlIIIlIllI["memory_depth"] < float("inf"):
            lIIIIlIlllIll.IlllllIlllI = lIIIIlIlllIll.lIIlIIIlIllI["memory_depth"]
        else:
            lIIIIlIlllIll.IlllllIlllI = 0
        lIIIIlIlllIll.llllllIIIIIllIl = "Go By Majority" + (lIIIIlIlllIll.IlllllIlllI > 0) * (
            ": %i" % lIIIIlIlllIll.IlllllIlllI
        )
        if lIIIIlIlllIll.lIIIIIIIlIlIllIllIl:
            lIIIIlIlllIll.llllllIIIIIllIl = "Soft " + lIIIIlIlllIll.llllllIIIIIllIl
        else:
            lIIIIlIlllIll.llllllIIIIIllIl = "Hard " + lIIIIlIlllIll.llllllIIIIIllIl
    def IIIlIIIlIllIllllIIII(lIIIIlIlllIll):
        return lIIIIlIlllIll.llllllIIIIIllIl
    def llIllIllllI(lIIIIlIlllIll, lIIIIlIIlllIlIIIlI: Player) -> Action:
        IIIlIIIIIIIIlllIIIll = lIIIIlIIlllIlIIIlI.IIIlIIIIIIIIlllIIIll[-lIIIIlIlllIll.IlllllIlllI :]
        IIlIIllIIlllIIIIll = sum([IlIlIIllII == lIlllIIIlIllllIlII for IlIlIIllII in IIIlIIIIIIIIlllIIIll])
        IIIlIIIIIIllllllll = sum([IlIlIIllII == IllllIlIlIIIlI for IlIlIIllII in IIIlIIIIIIIIlllIIIll])
        if IIlIIllIIlllIIIIll > IIIlIIIIIIllllllll:
            return lIlllIIIlIllllIlII
        if IIlIIllIIlllIIIIll == IIIlIIIIIIllllllll:
            if lIIIIlIlllIll.lIIIIIIIlIlIllIllIl:
                return IllllIlIlIIIlI
            else:
                return lIlllIIIlIllllIlII
        return IllllIlIlIIIlI
class lllIIIlIIIllI(IIIlIIllIlIlI):
    llllllIIIIIllIl = "strategy"
    lIIlIIIlIllI = copy.copy(IIIlIIllIlIlI.lIIlIIIlIllI)
    lIIlIIIlIllI["memory_depth"] = 5
    def __init__(lIIIIlIlllIll) -> None:
        super().__init__(llIIlllIIllll=5)