#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
struct memory
{
int len;
int number;
bool Is_use=false;
memory(int L,int N)
{
len=L;
number=N;
Is_use=true;
}
};
bool cmp(const memory &l,const memory &r)
{
if(l.Is_use==r.Is_use)
{
return l.number<r.number;
}
return l.Is_use>r.Is_use;
}
int main()
{
vector<memory> v;
vector<memory>::iterator it;
int num_of_block=1;
int leftmemory;
int t,m;
cin>>t>>m;
leftmemory=m;
while(t--)
{
string op;
int num;
cin>>op;
if(op=="alloc")
{
cin>>num;
if(leftmemory<num) cout<<"NULL"<<endl;
else
{
bool flag=0;
for(it=v.begin();it!=v.end();it++)
{
if(it->Is_use==false&&it->len>=num)
{
// cout<<num_of_block<<endl;
// it->len-=num;
// //v.insert(it-1,memory(num,num_of_block));
// leftmemory-=num;
// num_of_block++;
// flag=true;
// break;
cout<<num_of_block<<endl;
int temp=it->len;
it->number=num_of_block;
it->Is_use=true;
it->len=num;
v.insert(it+1,memory(temp-num,-1));
leftmemory-=num;
num_of_block++;
flag=true;
break;
}
}
if(!flag)
{
int sum=0;
for(it=v.begin();it!=v.end();it++)
{
sum+=it->len;
}
if(sum+num>m) cout<<"NULL"<<endl;
else
{
cout<<num_of_block<<endl;
leftmemory-=num;
v.push_back(memory(num,num_of_block));
num_of_block++;
}
}
}
}
else if(op=="erase")
{
cin>>num;
bool flag=0;
for(it=v.begin();it!=v.end();it++)
{
if(it->number==num&&it->Is_use==true)
{
it->Is_use=false;
flag=true;
leftmemory+=it->len;
break;
}
}
if(!flag) cout<<"ILLEGAL_ERASE_ARGUMENT"<<endl;
}
else
{
sort(v.begin(),v.end(),cmp);
for(it=v.begin();it!=v.end();it++)
if(it->Is_use==false)
{
leftmemory+=it->len;
v.erase(it);
it--;
}
}
}
system("pause");
return 0;
}