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
lIIIlIIIlIIIIIlIl, llllIIlIlI = Action.C, Action.D
IIllIlIIlIIlllIII = (lIIIlIIIlIIIIIlIl, llllIIlIlI)
IIIlllII = Tuple[int, Action, int, Action]
class IIlIlIIIIl(Player):
    lllIllIIIIlIIIlIlIlI = "strategy"
    IllllIIllllIlllll: Dict[Text, Any] = {
        "memory_depth": 1,
        "stochastic": False,
        "long_run_time": False,
        "inspects_source": False,
        "manipulates_source": False,
        "manipulates_state": False,
    }
    def __init__(
        IIlIlIlIIIIIl,
        IIIlIIlIIIIIll: Tuple[IIIlllII, ...] = ((1, lIIIlIIIlIIIIIlIl, 1, lIIIlIIIlIIIIIlIl), (1, llllIIlIlI, 1, llllIIlIlI)),
        IIIIIlIIlIIllllIlIll: int = 1,
        llIlllIIIlIlIllllllI: Action = lIIIlIIIlIIIIIlIl,
    ) -> None:
        Player.__init__(IIlIlIlIIIIIl)
        IIlIlIlIIIIIl.IIIIIlIIlIIllllIlIll = IIIIIlIIlIIllllIlIll
        IIlIlIlIIIIIl.llIlllIIIlIlIllllllI = llIlllIIIlIlIllllllI
        IIlIlIlIIIIIl.IlIIIllIIIIl = SimpleFSM(IIIlIIlIIIIIll, IIIIIlIIlIIllllIlIll)
    def IllIIIlllI(IIlIlIlIIIIIl, IllIIIIIIlIlIII: Player) -> Action:
        if len(IIlIlIlIIIIIl.history) == 0:
            return IIlIlIlIIIIIl.llIlllIIIlIlIllllllI
        else:
            return IIlIlIlIIIIIl.IlIIIllIIIIl.move(IllIIIIIIlIlIII.history[-1])
class lllIIIlIIIllIlIIlI(IIlIlIIIIl):
    lllIllIIIIlIIIlIlIlI = "strategy"
    IllllIIllllIlllll = {
        "memory_depth": float("inf"),
        "stochastic": False,
        "long_run_time": False,
        "inspects_source": False,
        "manipulates_source": False,
        "manipulates_state": False,
    }
    def __init__(IIlIlIlIIIIIl) -> None:
        IIIlIIlIIIIIll = (
            (0, lIIIlIIIlIIIIIlIl, 8, lIIIlIIIlIIIIIlIl),
            (0, llllIIlIlI, 3, llllIIlIlI),
            (1, lIIIlIIIlIIIIIlIl, 13, lIIIlIIIlIIIIIlIl),
            (1, llllIIlIlI, 15, llllIIlIlI),
            (2, lIIIlIIIlIIIIIlIl, 12, lIIIlIIIlIIIIIlIl),
            (2, llllIIlIlI, 3, llllIIlIlI),
            (3, lIIIlIIIlIIIIIlIl, 10, lIIIlIIIlIIIIIlIl),
            (3, llllIIlIlI, 3, llllIIlIlI),
            (4, lIIIlIIIlIIIIIlIl, 5, llllIIlIlI),
            (4, llllIIlIlI, 4, llllIIlIlI),
            (5, lIIIlIIIlIIIIIlIl, 4, llllIIlIlI),
            (5, llllIIlIlI, 10, llllIIlIlI),
            (6, lIIIlIIIlIIIIIlIl, 8, lIIIlIIIlIIIIIlIl),
            (6, llllIIlIlI, 6, llllIIlIlI),
            (8, lIIIlIIIlIIIIIlIl, 2, lIIIlIIIlIIIIIlIl),
            (8, llllIIlIlI, 4, llllIIlIlI),
            (10, lIIIlIIIlIIIIIlIl, 4, llllIIlIlI),
            (10, llllIIlIlI, 1, llllIIlIlI),
            (11, lIIIlIIIlIIIIIlIl, 14, llllIIlIlI),
            (11, llllIIlIlI, 13, lIIIlIIIlIIIIIlIl),
            (12, lIIIlIIIlIIIIIlIl, 13, lIIIlIIIlIIIIIlIl),
            (12, llllIIlIlI, 2, lIIIlIIIlIIIIIlIl),
            (13, lIIIlIIIlIIIIIlIl, 13, lIIIlIIIlIIIIIlIl),
            (13, llllIIlIlI, 6, lIIIlIIIlIIIIIlIl),
            (14, lIIIlIIIlIIIIIlIl, 3, llllIIlIlI),
            (14, llllIIlIlI, 13, llllIIlIlI),
            (15, lIIIlIIIlIIIIIlIl, 5, llllIIlIlI),
            (15, llllIIlIlI, 11, lIIIlIIIlIIIIIlIl),
        )
        super().__init__(
            IIIlIIlIIIIIll=IIIlIIlIIIIIll, IIIIIlIIlIIllllIlIll=0, llIlllIIIlIlIllllllI=lIIIlIIIlIIIIIlIl
        )