import itertools
from typing import Any, Dict, List, Optional, Sequence, Text, Tuple
from axelrod.action import Action
from axelrod.evolvable_player import (
    EvolvablePlayer,
    InsufficientParametersError,
    copy_lists,
)
from axelrod.player import Player
IIlIlIlIIIllIIIlI, llIIllIlIIIIl = Action.C, Action.D
lIllllIllllllI = (IIlIlIlIIIllIIIlI, llIIllIlIIIIl)
lllllIIIIlIllllIl = Tuple[int, Action, int, Action]
class IIIllIlIlllIIIIIllI(Player):
    lIIlIIllIIllIl = "strategy"
    IlIIIIllIIlIlI: Dict[Text, Any] = {
        "memory_depth": 1,
        "stochastic": False,
        "long_run_time": False,
        "inspects_source": False,
        "manipulates_source": False,
        "manipulates_state": False,
    }
    def __init__(
        IlIIlIIlII,
        IIIlIIIlIl: Tuple[lllllIIIIlIllllIl, ...] = ((1, IIlIlIlIIIllIIIlI, 1, IIlIlIlIIIllIIIlI), (1, llIIllIlIIIIl, 1, llIIllIlIIIIl)),
        IllIlIIlIIIIIIlIIll: int = 1,
        llIlllIl: Action = IIlIlIlIIIllIIIlI,
    ) -> None:
        Player.__init__(IlIIlIIlII)
        IlIIlIIlII.IllIlIIlIIIIIIlIIll = IllIlIIlIIIIIIlIIll
        IlIIlIIlII.llIlllIl = llIlllIl
        IlIIlIIlII.lIllIIIIIIIllIlllll = SimpleFSM(IIIlIIIlIl, IllIlIIlIIIIIIlIIll)
    def IllIIllIl(IlIIlIIlII, IllllIlllIIII: Player) -> Action:
        if len(IlIIlIIlII.history) == 0:
            return IlIIlIIlII.llIlllIl
        else:
            return IlIIlIIlII.lIllIIIIIIIllIlllll.move(IllllIlllIIII.history[-1])
class IlIIIIll(IIIllIlIlllIIIIIllI):
    lIIlIIllIIllIl = "strategy"
    IlIIIIllIIlIlI = {
        "memory_depth": float("inf"),
        "stochastic": False,
        "long_run_time": False,
        "inspects_source": False,
        "manipulates_source": False,
        "manipulates_state": False,
    }
    def __init__(IlIIlIIlII) -> None:
        IIIlIIIlIl = (
            (0, IIlIlIlIIIllIIIlI, 13, llIIllIlIIIIl),
            (0, llIIllIlIIIIl, 12, llIIllIlIIIIl),
            (1, IIlIlIlIIIllIIIlI, 3, llIIllIlIIIIl),
            (1, llIIllIlIIIIl, 4, llIIllIlIIIIl),
            (2, IIlIlIlIIIllIIIlI, 14, llIIllIlIIIIl),
            (2, llIIllIlIIIIl, 9, llIIllIlIIIIl),
            (3, IIlIlIlIIIllIIIlI, 0, IIlIlIlIIIllIIIlI),
            (3, llIIllIlIIIIl, 1, llIIllIlIIIIl),
            (4, IIlIlIlIIIllIIIlI, 1, llIIllIlIIIIl),
            (4, llIIllIlIIIIl, 2, llIIllIlIIIIl),
            (7, IIlIlIlIIIllIIIlI, 12, llIIllIlIIIIl),
            (7, llIIllIlIIIIl, 2, llIIllIlIIIIl),
            (8, IIlIlIlIIIllIIIlI, 7, llIIllIlIIIIl),
            (8, llIIllIlIIIIl, 9, llIIllIlIIIIl),
            (9, IIlIlIlIIIllIIIlI, 8, llIIllIlIIIIl),
            (9, llIIllIlIIIIl, 0, llIIllIlIIIIl),
            (10, IIlIlIlIIIllIIIlI, 2, IIlIlIlIIIllIIIlI),
            (10, llIIllIlIIIIl, 15, IIlIlIlIIIllIIIlI),
            (11, IIlIlIlIIIllIIIlI, 7, llIIllIlIIIIl),
            (11, llIIllIlIIIIl, 13, llIIllIlIIIIl),
            (12, IIlIlIlIIIllIIIlI, 3, IIlIlIlIIIllIIIlI),
            (12, llIIllIlIIIIl, 8, llIIllIlIIIIl),
            (13, IIlIlIlIIIllIIIlI, 7, IIlIlIlIIIllIIIlI),
            (13, llIIllIlIIIIl, 10, llIIllIlIIIIl),
            (14, IIlIlIlIIIllIIIlI, 10, llIIllIlIIIIl),
            (14, llIIllIlIIIIl, 7, llIIllIlIIIIl),
            (15, IIlIlIlIIIllIIIlI, 15, IIlIlIlIIIllIIIlI),
            (15, llIIllIlIIIIl, 11, llIIllIlIIIIl),
        )
        super().__init__(
            IIIlIIIlIl=IIIlIIIlIl, IllIlIIlIIIIIIlIIll=0, llIlllIl=IIlIlIlIIIllIIIlI
        )