Problem:
三目並べ

三目並べは，３ × ３のマス目の中に交互に ○ と × を入れていき、縦・横・斜めの何れかに一列 ○ か × が並んだときに、勝ちとなるゲームです（図1〜図3 を参照）

図１：○の勝ち

図２：× の勝ち

図３：引き分け

三目並べは、○と×が交互にマス目を埋めていき、どちらかが一列揃ったときにゲーム終了となります。そのため、図 4 のように、○と×が両方とも一列そろっている場合はありえない局面です。ありえない局面が入力されることはありません。

図４：ありえない局面

三目並べの盤面を読み込んで、勝敗の結果を出力するプログラムを作成して下さい。

Input

入力は複数のデータセットからなります。各データセットとして、盤面を表す１つの文字列が１行に与えられます。
盤面の文字列は、○、×、空白をそれぞれ半角英小文字の o、x、s であらわし、下図のマス目の順に並んでいます。

データセットの数は 50 を超えません。

Output

データセットごとに、○が勝ちなら半角英小文字の o を、×が勝ちなら半角英小文字の x を、引き分けならば半角英小文字の d を１行に出力してください。

Sample Input

ooosxssxs
xoosxsosx
ooxxxooxo

Output for the Sample Input

o
x
d

Solution in JAVA (judge verdict: Accepted)

import java.util.*;

class Main{
  public static char chkWin(String str){
    char[][] mark = {{str.charAt(0),str.charAt(1),str.charAt(2)},
                     {str.charAt(3),str.charAt(4),str.charAt(5)},
                     {str.charAt(6),str.charAt(7),str.charAt(8)}};
    for (int i = 0; i < 3; i++) {
      if (mark[i][0] != 's' && mark[i][0] == mark[i][1] &&
                               mark[i][0] == mark[i][2]){
        return mark[i][0];
      }
      else if(mark[0][i] != 's' && mark[0][i] == mark[1][i] &&
                                   mark[0][i] == mark[2][i]){
        return mark[0][i];
      }
    }
    if (mark[1][1] != 's'){
      if(mark[0][0] == mark[1][1] && mark[1][1] == mark[2][2]){
        return mark[2][2];
      }
      else if(mark[0][2] == mark[1][1] && mark[1][1] == mark[2][0]){
        return mark[2][0];
      }
    }
    return 'd';
  }

  public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    while(sc.hasNext()) {
      String str = sc.next();
      System.out.println(chkWin(str));
    }
  }
}