Time Limit: 8 sec / Memory Limit: 64 MB





Example

Input

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


Output

0
#include <cstdio>
#include <iostream>
#include <vector>
#include <list>
#include <cmath>
#include <fstream>
#include <algorithm>
#include <string>
#include <queue>
#include <set>
#include <map>
#include <complex>
#include <iterator>
#include <cstdlib>
#include <cstring>
#include <sstream>

using namespace std;

const double EPS=(1e-10);
typedef long long ll;
typedef pair<int,int> pii;
bool EQ(double a,double b){
  return abs((a)-(b))<EPS;
}
void fast_stream(){
  std::ios_base::sync_with_stdio(0);
}

int M;
int V;
//  éAhXÉèÄçêÄ¢éÊ
int allocMem[1000001];
// ÏÌQÆæ
int refIdx[1001];
vector<string> strs;
bool isError;

int Expr(string);


void Free(string s){
  if(s=="NULL")return;
  int res=Expr(s);
  // NULL
  if(res==0)return;
  // ùÉèÄª0Ü½ÍÏÌQÆæªèÄÈµ
  if(res==-1||allocMem[res]==0){
    // error
    isError=true;
  }
  // ÌJú
  M+=allocMem[res];
  allocMem[res]=0;
  // ÏÌQÆæð³­·
  //refIdx[res]=-1;
}

int Clone(string s){
  if(s=="NULL")return 0;
  int res=Expr(s);
  // NULL
  if(res==0)return 0;
  // Error
  if(res==-1){
    isError=true;
    return -1;
  }
  int sz=allocMem[res];
  if(sz==0){
    isError=true;
    return -1;
  }
  // NULL
  if(M-sz<0)return 0;
  allocMem[V++]=sz;
  M-=sz;
  return V-1;
}

int Malloc(string s){
  int a=atoi(s.c_str());
  // s«
  if(M-a<0){
    return 0;
  }
  allocMem[V++]=a;
  M-=a;
  // èÄêÌQÆÔµ
  return V-1;
}

int Assign(string s){
  char var=s[0];
  int res=Expr(s.substr(2));
  refIdx[var]=res;
  return res;
}

int Expr(string s){
  if(s=="NULL")return 0;
  if(s[0]=='('&&s[s.size()-1]==')'){
    int cnt=1;
    bool ok=true;
    for(int i=1;i<s.size()-1;i++){
      if(s[i]=='(')cnt++;
      else if(s[i]==')')cnt--;
      if(cnt==0)ok=false;
    }
    if(ok)return Expr(s.substr(1,s.size()-2));
  }
  if(!s.compare(0,6,"malloc"))
    return Malloc(s.substr(7,s.size()-8));
  else if(!s.compare(0,5,"clone"))
    return Clone(s.substr(6,s.size()-7));
  if(s[0]>='A'&&s[0]<='Z'){
    if(s.size()==1)return refIdx[s[0]];
    return Assign(s);
  }
}

int main(){
  memset(refIdx,-1,sizeof(refIdx));
  cin>>M;
  V=1;
  string ss;
  while(cin>>ss)strs.push_back(ss);
  for(int i=0;i<strs.size();i++){
    string s=strs[i];
    if(!s.compare(0,4,"free"))Free(s.substr(5,s.size()-6));
    else Expr(s);
    if(isError){
      cout<<"Error"<<endl;
      break;
    }
  }
  if(!isError){
    for(int i=1;i<1001;i++){
      int a=refIdx[i];
      if(a!=-1&&a!=0)allocMem[a]=0;
    }
    int sum=0;
    for(int i=0;i<V;i++)sum+=allocMem[i];
    cout<<sum<<endl;
  }
  return 0;
}