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
lIIlIlIIllIIIIIll, llIllllIIIll = Action.C, Action.D
lIIIIIIIlIl = (lIIlIlIIllIIIIIll, llIllllIIIll)
IIlIllIllIlIllllIlII = Tuple[int, Action, int, Action]
class llIIIIII(Player):
    lllllIIIIIlll = "strategy"
    IIlIllllllIIlIIlIIl: Dict[Text, Any] = {
        "memory_depth": 1,
        "stochastic": False,
        "long_run_time": False,
        "inspects_source": False,
        "manipulates_source": False,
        "manipulates_state": False,
    }
    def __init__(
        IIIIllIlIllIIlIl,
        llllIIllI: Tuple[IIlIllIllIlIllllIlII, ...] = ((1, lIIlIlIIllIIIIIll, 1, lIIlIlIIllIIIIIll), (1, llIllllIIIll, 1, llIllllIIIll)),
        llIlIIlIIllIIIII: int = 1,
        lllIIlIlllIIllllIlI: Action = lIIlIlIIllIIIIIll,
    ) -> None:
        Player.__init__(IIIIllIlIllIIlIl)
        IIIIllIlIllIIlIl.llIlIIlIIllIIIII = llIlIIlIIllIIIII
        IIIIllIlIllIIlIl.lllIIlIlllIIllllIlI = lllIIlIlllIIllllIlI
        IIIIllIlIllIIlIl.IIIllIllIlllIlIlIllI = SimpleFSM(llllIIllI, llIlIIlIIllIIIII)
    def IllIIIIllllIlIlll(IIIIllIlIllIIlIl, lllIIlllllll: Player) -> Action:
        if len(IIIIllIlIllIIlIl.history) == 0:
            return IIIIllIlIllIIlIl.lllIIlIlllIIllllIlI
        else:
            return IIIIllIlIllIIlIl.IIIllIllIlllIlIlIllI.move(lllIIlllllll.history[-1])
class IllIIIIIlIIll(llIIIIII):
    lllllIIIIIlll = "strategy"
    IIlIllllllIIlIIlIIl = {
        "memory_depth": float("inf"),
        "stochastic": False,
        "long_run_time": False,
        "inspects_source": False,
        "manipulates_source": False,
        "manipulates_state": False,
    }
    def __init__(IIIIllIlIllIIlIl) -> None:
        llllIIllI = (
            (0, lIIlIlIIllIIIIIll, 0, llIllllIIIll),
            (0, llIllllIIIll, 1, llIllllIIIll),
            (1, lIIlIlIIllIIIIIll, 2, llIllllIIIll),
            (1, llIllllIIIll, 3, llIllllIIIll),
            (2, lIIlIlIIllIIIIIll, 4, lIIlIlIIllIIIIIll),
            (2, llIllllIIIll, 3, llIllllIIIll),
            (3, lIIlIlIIllIIIIIll, 5, llIllllIIIll),
            (3, llIllllIIIll, 4, lIIlIlIIllIIIIIll),
            (4, lIIlIlIIllIIIIIll, 2, lIIlIlIIllIIIIIll),
            (4, llIllllIIIll, 6, llIllllIIIll),
            (5, lIIlIlIIllIIIIIll, 7, llIllllIIIll),
            (5, llIllllIIIll, 3, llIllllIIIll),
            (6, lIIlIlIIllIIIIIll, 7, lIIlIlIIllIIIIIll),
            (6, llIllllIIIll, 7, llIllllIIIll),
            (7, lIIlIlIIllIIIIIll, 8, llIllllIIIll),
            (7, llIllllIIIll, 7, llIllllIIIll),
            (8, lIIlIlIIllIIIIIll, 8, llIllllIIIll),
            (8, llIllllIIIll, 6, llIllllIIIll),
        )
        super().__init__(
            llllIIllI=llllIIllI, llIlIIlIIllIIIII=0, lllIIlIlllIIllllIlI=lIIlIlIIllIIIIIll
        )