import collections
from typing import Iterable, Tuple


class KoboldStoryRegister(collections.OrderedDict):
    '''
    Complexity-optimized class for keeping track of story chunks
    '''

    def __init__(self, sequence: Iterable[Tuple[int, str]] = ()):
        super().__init__(sequence)
        self.__next_id: int = len(sequence)

    def append(self, v: str) -> None:
        self[self.__next_id] = v
        self.increment_id()
    
    def pop(self) -> str:
        return self.popitem()[1]
    
    def get_first_key(self) -> int:
        if len(self) == 0:
            return -1
        else:
            return next(iter(self))

    def get_last_key(self) -> int:
        if len(self) == 0:
            return -1
        else:
            return next(reversed(self))

    def __getitem__(self, k: int) -> str:
        return super().__getitem__(k)

    def __setitem__(self, k: int, v: str) -> None:
        return super().__setitem__(k, v)

    def increment_id(self) -> None:
        self.__next_id += 1

    def get_next_id(self) -> int:
        return self.__next_id

    def set_next_id(self, x: int) -> None:
        self.__next_id = x