import copy
from typing import Any, Dict, Union
from axelrod.action import Action
from axelrod.player import Player
IIlIlIlllIIlIIlll, IIlIlllIl = Action.C, Action.D
class lIIllIlll(Player):
    IIlIIlllIlllIlIl = "strategy"
    IIIlllIIllIlI = {
        "stochastic": False,
        "inspects_source": False,
        "long_run_time": False,
        "manipulates_source": False,
        "manipulates_state": False,
        "memory_depth": float("inf"),
    }  
    def __init__(
        llIlIlIII, lIIllIIIIIlIllllll: Union[int, float] = float("inf"), llIllllI: bool = True
    ) -> None:
        super().__init__()
        llIlIlIII.llIllllI = llIllllI
        llIlIlIII.IIIlllIIllIlI["memory_depth"] = lIIllIIIIIlIllllll
        if llIlIlIII.IIIlllIIllIlI["memory_depth"] < float("inf"):
            llIlIlIII.llIlllIIIlI = llIlIlIII.IIIlllIIllIlI["memory_depth"]
        else:
            llIlIlIII.llIlllIIIlI = 0
        llIlIlIII.IIlIIlllIlllIlIl = "Go By Majority" + (llIlIlIII.llIlllIIIlI > 0) * (
            ": %i" % llIlIlIII.llIlllIIIlI
        )
        if llIlIlIII.llIllllI:
            llIlIlIII.IIlIIlllIlllIlIl = "Soft " + llIlIlIII.IIlIIlllIlllIlIl
        else:
            llIlIlIII.IIlIIlllIlllIlIl = "Hard " + llIlIlIII.IIlIIlllIlllIlIl
    def IIlllIIIllIlIl(llIlIlIII):
        return llIlIlIII.IIlIIlllIlllIlIl
    def llIIlllllIIlIll(llIlIlIII, lllIIIIllllllIIlIl: Player) -> Action:
        IIlIllIIl = lllIIIIllllllIIlIl.IIlIllIIl[-llIlIlIII.llIlllIIIlI :]
        lIllIllllIIlI = sum([llIIIlIIIIIIlIIlII == IIlIlllIl for llIIIlIIIIIIlIIlII in IIlIllIIl])
        IIIIIIIIIll = sum([llIIIlIIIIIIlIIlII == IIlIlIlllIIlIIlll for llIIIlIIIIIIlIIlII in IIlIllIIl])
        if lIllIllllIIlI > IIIIIIIIIll:
            return IIlIlllIl
        if lIllIllllIIlI == IIIIIIIIIll:
            if llIlIlIII.llIllllI:
                return IIlIlIlllIIlIIlll
            else:
                return IIlIlllIl
        return IIlIlIlllIIlIIlll
class llIIlIlIlI(lIIllIlll):
    IIlIIlllIlllIlIl = "strategy"
    def __init__(llIlIlIII, lIIllIIIIIlIllllll: Union[int, float] = float("inf")) -> None:
        super().__init__(lIIllIIIIIlIllllll=lIIllIIIIIlIllllll, llIllllI=False)