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.Scanner;

public class Main {

	static Scanner sc = new Scanner(System.in);
	public static void main(String[] args) {
		while (sc.hasNext()) {
			String str = sc.nextLine();
			tictactoe(str);
		}

	}

	private static void tictactoe(String str) {
		char[][] t = new char[3][3];
		char winner = 'd';

			for (int i = 0; i < 3; i++) {
				for (int j = 0; j < 3; j++) {
					t[i][j] = str.charAt( i * 3 + j );
				}
			}

			for (int i = 0; i < 3; i++) {
					if ( t[i][0] == t[i][1] && t[i][0] == t[i][2] &&
						 t[i][1] == t[i][2] && t[i][0] != 's'		)
					{
						winner = t[i][0];
						break;
					} else if (t[0][i] == t[1][i] && t[0][i] == t[2][i] &&
							 t[1][i] == t[2][i] && t[0][i] != 's'		)
					{
						winner = t[0][i];
						break;
					}
			}

			if ( winner == 'd' ) {
				if ( t[0][0] == t[1][1] && t[1][1] == t[2][2] &&
					 t[0][0] == t[2][2] && t[0][0] != 's'	)
				{
					winner = t[0][0];
				} else if ( t[0][2] == t[1][1] && t[1][1] == t[2][0] &&
						 	t[0][2] == t[2][0] && t[0][2] != 's'	)
				{
					winner = t[0][2];
				}

			}

			System.out.println(winner);
	}

}