PKU 2996 Help Me with the Game

http://poj.org/problem?id=2996
チェスボードを読み取ってそれぞれの駒の場所を出力するというような問題。

書くだけ。
いろいろと楽をしようと思ったけれど、あまり簡潔に書けてないです。

main(){
  map<char,set<PI> >ans;
  rep(i,17){
    string in;
    cin>>in;
    rep(j,SZ(in))
      if(isalpha(in[j])){
        if(isupper(in[j]))ans[in[j]].insert(mp(7-(i-1)/2+1,(j-2)/4+1));
        else ans[in[j]].insert(mp((i-1)/2-8,(j-2)/4+1));
      }
  }
  string out="KQRBNP";
  rep(re,2){
    if(!re)cout<<"White: ";
    else cout<<"Black: ";
    rep(i,SZ(out)){
      switch(toupper(out[i])){
      case 'R':
      case 'B':
        FOR(siter,ans[out[i]])cout<<','<<(char)toupper(out[i])<<char(siter->S+'a'-1)<<abs(siter->F);
        break;
      case 'P':
        FOR(siter,ans[out[i]])cout<<','<<char(siter->S+'a'-1)<<abs(siter->F);
        break;
      case 'K':
        FOR(siter,ans[out[i]])cout<<(char)toupper(out[i])<<char(siter->S+'a'-1)<<abs(siter->F);
        break;
      default:
        FOR(siter,ans[out[i]])cout<<','<<(char)toupper(out[i])<<char(siter->S+'a'-1)<<abs(siter->F);
        break;
      }
      out[i]=tolower(out[i]);
    }
    cout<<endl;
  }
}