PKU 3157 Java vs C++

http://poj.org/problem?id=3157
C++の関数名によく使われる形式と、Javaの関数名によく使われる形式とそれ以外の形式の文字列がある。
C++の形式の場合はJava形式に、Java形式の場合はC++形式に書き換えて、それ以外の場合はそれを検出せよという問題。

自分にとってはWAラッシュな感じの問題でした。
初手アクセプトしている人はいったいなんなんだといいたいです。
以下、入力に含まれていると思われるいやらしいケース。
A 最初から大文字。
__ 2連続アンダースコア。
_a_ アンダースコアが最初か最後についている。
まぁ、解けてよかったです。

main(){
  string in;
  cin>>in;

  bool us=false,up=false;
  rep(i,in.size()){
    if(isupper(in[i]))up=true;
    if(in[i]=='_')us=true;
  }
  if((up&&us) || isupper(in[0]) ||
     in[0]=='_' || in[in.size()-1]=='_' || in.find("__")!=string::npos){
    cout<<"Error!"<<endl;
  }else if(us){
    rep(i,in.size()){
      if(in[i]=='_')continue;
      if(i && in[i-1]=='_')cout<<char(toupper(in[i]));
      else cout<<in[i];
    }
    cout<<endl;
  }else if(up){
    rep(i,in.size()){
      if(isupper(in[i]))cout<<'_'<<char(tolower(in[i]));
      else cout<<in[i];
    }
    cout<<endl;
  }else cout<<in<<endl;
}