Менеджер памяти
Вы работаете над созданием компилятора своего собственного языка программирования, и уже реализовали все кроме менеджера памяти (мп). мп отвечает за выделение памяти под объекты и их освобождение по ненадобности. Всего в Вашем компьютере имеется n последовательно расположенных байт памяти. Каждый объект требует определенное количество последовательных байт в памяти. Во время выполнения программа может присылать два типа запроса мп:
1) Выделить память под объект размером a байт. Эта величина может быть разной для разных объектов. Два объекта не могут иметь общей памяти.
2) Удалить заданный объект, под который раньше была выделена память.
Вам наперед известны все m запросов, которые будут посланы мп. Найдите вариант их обслуживания, или сообщите что сделать это невозможно. Гарантируется, что будет не более двух запросов второго вида.
Входные данные
Первая строка содержит два числа n и m (1 ≤ n ≤ 10^5, 1 ≤ m ≤ 10^5). Каждая из следующих m строк содержит два целых числа a и b. Если a = 1, то b равно размеру объекта, на который следует выделить память. Если a = 2, то b равно индексу уже обработанного запроса и означает, что следует освободить объект, выделенный тем запросом. Гарантируется корректность входных данных, то есть Вас не будут просить удалить уже удаленный объект и так далее.
Выходные данные
Если выполнить все запросы невозможно, выведите слово “IMPOSSIBLE” (без кавычек). Иначе для каждого запроса первого типа (когда a = 1) вывести в отдельной строке одно число - позицию первого байта памяти, выделенной под объект. Байты в памяти нумеруются с 0. Если существует несколько решений, то вывести любое.