Менеджер пам'яті
Ви працюєте над створенням компілятора для власної мови програмування і вже реалізували все, окрім менеджера пам'яті (МП). МП відповідає за виділення пам'яті для об'єктів та їх звільнення, коли вони більше не потрібні. У вашому комп'ютері є 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. Якщо існує декілька рішень, виведіть будь-яке.