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: Wrong Answer)


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	public static void main(String[] args) throws NumberFormatException,
			IOException {
		BufferedReader reader = new BufferedReader(new InputStreamReader(
				System.in));
		StringBuilder builder = new StringBuilder();
		String line;
		while ((line = reader.readLine()) != null) {
			if (line.isEmpty()) {
				break;
			}
			String maru = getNum('o', line);
			String batu = getNum('x', line);
			if (check(maru)) {
				System.out.println("o");
			} else if (check(batu)) {
				System.out.println("x");
			} else {
				System.out.println("d");
			}
		}

	}

	private static boolean check(String a) {
		if (a.contains("123") || a.contains("456") || a.contains("789")) {
			return true;
		}
		if (a.contains("1") && a.contains("5") && a.contains("9")
				|| (a.contains("3") && a.contains("5") && a.contains("7"))) {
			return true;
		}
		char[] chs = new char[a.length()];
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				chs[i] = a.charAt(j * 3 + i);
			}
		}
		String b = String.valueOf(chs);
		if (b.contains("147") || b.contains("258") || b.contains("369")) {
			return true;
		}

		return false;
	}

	private static String getNum(char a, String line) {
		char[] chs = line.toCharArray();
		for (int i = 0; i < chs.length; i++) {
			if (chs[i] == a) {
				chs[i] = (char) (i + 1 + '0');
			}
		}
		return String.valueOf(chs);
	}
}