Time Limit: 8 sec / Memory Limit: 64 MB





Example

Input

100
A=malloc(10)
B=clone(A)
free(A)


Output

0
#include<cctype>
#include<cstdio>
#include<cstring>

#define rep(i,n) for(int i=0;i<(n);i++)

using namespace std;

#define NIL (-2)

int mem_max,mem_used;
int mem[10000],mem_id;
int var[128];

bool error;
int idx,len;
char s[301];

int number(){
	int num=0;
	for(;idx<len && isdigit(s[idx]);idx++) num=10*num+(s[idx]-'0');
	return num;
}

int expr(){
	if(s[idx]=='('){ // "(" <expr> ")" Ìp^[
		idx++;
		int a=expr();
		idx++;
		return a;
	}
	else if(isupper(s[idx]) && idx+1<len && s[idx+1]=='='){ // <assign> Ìp^[
		char c=s[idx];
		idx+=2;
		return var[c]=expr();
	}
	else if(s[idx]=='N' && idx+1<len && s[idx+1]=='U'){ // "NULL" Ìp^[
		idx+=4;
		return NIL;
	}
	else if(isupper(s[idx])){ // <variable> Ìp^[
		return var[s[idx++]];
	}
	else if(s[idx]=='m'){ // <malloc> Ìp^[
		idx+=7;
		int num=number();
		idx++;
		if(mem_used+num>mem_max) return NIL;
		else{
			mem_used+=num;
			mem[mem_id]=num;
			return mem_id++;
		}
	}
	else{ // <clone> Ìp^[
		idx+=6;
		int a=expr();
		idx++;
		if(a==NIL) return NIL;
		else if(a==-1 || mem[a]==-1){
			error=true;
			return NIL;
		}
		else if(mem_used+mem[a]>mem_max){
			return NIL;
		}
		else{
			mem_used+=mem[a];
			mem[mem_id]=mem[a];
			return mem_id++;
		}
	}
}

void line(){
	if(s[idx]=='f'){ // free
		idx+=5;
		int a=expr();
		idx++;
		if(a==NIL);
		else if(a==-1 || mem[a]==-1){
			error=true;
		}
		else{
			mem_used-=mem[a];
			mem[a]=-1;
		}
	}
	else{ // other
		expr();
	}
}

void parse(const char *s){
	idx=0;
	len=strlen(s);
	strcpy(::s,s);
	line();
}

int main(){
	scanf("%d",&mem_max);
	rep(c,128) var[c]=-1;
	rep(i,10000) mem[i]=-1;
	while(1){
		char s[301];
		if(scanf("%s",s)==-1) break;
		parse(s);
		if(error){ puts("Error"); return 0; }
	}

	int mem_leak=mem_used;
	rep(c,128) if(var[c]!=-1 && mem[var[c]]!=-1){
		mem_leak-=mem[var[c]];
		mem[var[c]]=-1;
	}
	printf("%d\n",mem_leak);

	return 0;
}