import copy
from typing import Any, Dict, Union
from axelrod.action import Action
from axelrod.player import Player
IlIIlIIlIllll, IlllIIIlIllIIllllll = Action.C, Action.D
class IIIlIllIII(Player):
    lIIlllIIllII = "strategy"
    lllllIIlIlIIII = {
        "stochastic": False,
        "inspects_source": False,
        "long_run_time": False,
        "manipulates_source": False,
        "manipulates_state": False,
        "memory_depth": float("inf"),
    }  
    def __init__(
        llIlllllIIlllIllIlIl, IllIIllIIlIIlllIIIII: Union[int, float] = float("inf"), llIlllIIlllllIlIII: bool = True
    ) -> None:
        super().__init__()
        llIlllllIIlllIllIlIl.llIlllIIlllllIlIII = llIlllIIlllllIlIII
        llIlllllIIlllIllIlIl.lllllIIlIlIIII["memory_depth"] = IllIIllIIlIIlllIIIII
        if llIlllllIIlllIllIlIl.lllllIIlIlIIII["memory_depth"] < float("inf"):
            llIlllllIIlllIllIlIl.llIIIIIIllI = llIlllllIIlllIllIlIl.lllllIIlIlIIII["memory_depth"]
        else:
            llIlllllIIlllIllIlIl.llIIIIIIllI = 0
        llIlllllIIlllIllIlIl.lIIlllIIllII = "Go By Majority" + (llIlllllIIlllIllIlIl.llIIIIIIllI > 0) * (
            ": %i" % llIlllllIIlllIllIlIl.llIIIIIIllI
        )
        if llIlllllIIlllIllIlIl.llIlllIIlllllIlIII:
            llIlllllIIlllIllIlIl.lIIlllIIllII = "Soft " + llIlllllIIlllIllIlIl.lIIlllIIllII
        else:
            llIlllllIIlllIllIlIl.lIIlllIIllII = "Hard " + llIlllllIIlllIllIlIl.lIIlllIIllII
    def IlllIIlllIlIlIII(llIlllllIIlllIllIlIl):
        return llIlllllIIlllIllIlIl.lIIlllIIllII
    def lIlllIllIl(llIlllllIIlllIllIlIl, IIIlllIIIIlIlIllII: Player) -> Action:
        IIllIIIlllllIllII = IIIlllIIIIlIlIllII.IIllIIIlllllIllII[-llIlllllIIlllIllIlIl.llIIIIIIllI :]
        IIllllIIIIlIllllll = sum([lIllllIlIlIIlllIl == IlllIIIlIllIIllllll for lIllllIlIlIIlllIl in IIllIIIlllllIllII])
        llllIlll = sum([lIllllIlIlIIlllIl == IlIIlIIlIllll for lIllllIlIlIIlllIl in IIllIIIlllllIllII])
        if IIllllIIIIlIllllll > llllIlll:
            return IlllIIIlIllIIllllll
        if IIllllIIIIlIllllll == llllIlll:
            if llIlllllIIlllIllIlIl.llIlllIIlllllIlIII:
                return IlIIlIIlIllll
            else:
                return IlllIIIlIllIIllllll
        return IlIIlIIlIllll