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
lllIIIlIIlIll, llIllIlIIllIlIIlIIlI = Action.C, Action.D
IllIIlIlIll = (lllIIIlIIlIll, llIllIlIIllIlIIlIIlI)
llIlIlIIIlIlIIIlII = Tuple[int, Action, int, Action]
class lllllllIlIIIIll(Player):
    llIIlIllIIlIlIl = "strategy"
    IlIlIlIllIlllIIllIlI: Dict[Text, Any] = {
        "memory_depth": 1,
        "stochastic": False,
        "long_run_time": False,
        "inspects_source": False,
        "manipulates_source": False,
        "manipulates_state": False,
    }
    def __init__(
        lIlIlIIIIIlIlIIlII,
        IIllllIlIlIl: Tuple[llIlIlIIIlIlIIIlII, ...] = ((1, lllIIIlIIlIll, 1, lllIIIlIIlIll), (1, llIllIlIIllIlIIlIIlI, 1, llIllIlIIllIlIIlIIlI)),
        IIlIllllll: int = 1,
        lIIIllIlIIllIlIIllI: Action = lllIIIlIIlIll,
    ) -> None:
        Player.__init__(lIlIlIIIIIlIlIIlII)
        lIlIlIIIIIlIlIIlII.IIlIllllll = IIlIllllll
        lIlIlIIIIIlIlIIlII.lIIIllIlIIllIlIIllI = lIIIllIlIIllIlIIllI
        lIlIlIIIIIlIlIIlII.IIIIlIllIIIlI = SimpleFSM(IIllllIlIlIl, IIlIllllll)
    def lIIIlIIlIll(lIlIlIIIIIlIlIIlII, IllIllIIlIlI: Player) -> Action:
        if len(lIlIlIIIIIlIlIIlII.history) == 0:
            return lIlIlIIIIIlIlIIlII.lIIIllIlIIllIlIIllI
        else:
            return lIlIlIIIIIlIlIIlII.IIIIlIllIIIlI.move(IllIllIIlIlI.history[-1])
class IllIllIlIIIIlIllIlll(lllllllIlIIIIll):
    llIIlIllIIlIlIl = "strategy"
    IlIlIlIllIlllIIllIlI = {
        "memory_depth": float("inf"),
        "stochastic": False,
        "long_run_time": False,
        "inspects_source": False,
        "manipulates_source": False,
        "manipulates_state": False,
    }
    def __init__(lIlIlIIIIIlIlIIlII) -> None:
        IIllllIlIlIl = (
            (0, lllIIIlIIlIll, 0, lllIIIlIIlIll),
            (0, llIllIlIIllIlIIlIIlI, 2, llIllIlIIllIlIIlIIlI),
            (1, lllIIIlIIlIll, 3, llIllIlIIllIlIIlIIlI),
            (1, llIllIlIIllIlIIlIIlI, 0, lllIIIlIIlIll),
            (2, lllIIIlIIlIll, 2, llIllIlIIllIlIIlIIlI),
            (2, llIllIlIIllIlIIlIIlI, 1, lllIIIlIIlIll),
            (3, lllIIIlIIlIll, 3, llIllIlIIllIlIIlIIlI),
            (3, llIllIlIIllIlIIlIIlI, 1, llIllIlIIllIlIIlIIlI),
        )
        super().__init__(
            IIllllIlIlIl=IIllllIlIlIl, IIlIllllll=0, lIIIllIlIIllIlIIllI=lllIIIlIIlIll
        )