PKU 1684 Dynamic Declaration Language (DDL)

http://poj.org/problem?id=1684
与えられたように簡易的な言語のようなものを実装する。

エラーコードの出力ミスで1WA
全く読みやすくないゴミソースになってます。

int toi(const string&in){
  int ret=0;
  rep(i,SZ(in))ret=ret*10+in[i]-'0';
  return ret;
}

main(){
  int test;
  cin>>test;
  rep(sc,test){
    cout<<sc+1<<endl;
    int n;
    cin>>n;
    cin.ignore();
    string in[n];
    rep(i,n){
      string temp;
      getline(cin,temp);
      rep(j,SZ(temp))if(temp[j]!=' ')in[i]+=temp[j];
    }
    map<int,PI> dec;
    rep(i,n){
      const string& str=in[i];
      if(str[1]=='='){
        int id=str[0];
        int num=toi(str.substr(2));
        if(dec.count(id))dec[id]=mp(num,1);
        else cout<<i+1<<' '<<2<<endl;
      }else if(str[0]=='G'){
        if(isalpha(str[4])){
          int id=str[4];
          int num=toi(str.substr(5));
          if(dec.count(id)){
            dec[id].S=1;
            if(dec[id].F>0)i=num-2;
          }else cout<<i+1<<' '<<2<<endl;
        }else{
          int num=toi(str.substr(4));
          i=num-2;
        }
      }else if(str[1]=='C'){
        int id=str[3];
        if(dec.count(id) && dec[id].S){
          dec[id]=mp(0,0);
        }else if(dec.count(id)){
          cout<<i+1<<' '<<1<<endl;
        }else dec[id]=mp(0,0);
      }else if(str[0]=='I'){
        if(dec.count(str[3]))dec[str[3]].F++,dec[str[3]].S=1;
        else cout<<i+1<<' '<<2<<endl;
      }else if(str[0]=='E'){
        break;
      }else if(str[0]=='D'){
        if(dec.count(str[3]))dec[str[3]].F--,dec[str[3]].S=1;
        else cout<<i+1<<' '<<2<<endl;
      }
    }
  }
}