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.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;

/**
 * 0066 Tic Tac Toe
 */
public class Main {

    public static void main(String[] args) throws IOException {
        List<TicTacToe> ticTacToeList = readTicTacToe();
        for (TicTacToe ticTacToe : ticTacToeList) {
            // System.out.println(ticTacToe);
            System.out.println(ticTacToe.judge());
        }
    }

    private static List<TicTacToe> readTicTacToe() throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        List<TicTacToe> ticTacToeList = new ArrayList<>();
        String line = null;
        while ((line = reader.readLine()) != null) {
            ticTacToeList.add(new TicTacToe(line));
        }
        return ticTacToeList;
    }

    // Tic Tac Toe
    private static class TicTacToe {

        // Win pattern
        Pattern[] WIN_PATTERN = { Pattern.compile(".*1.*4.*7.*"), Pattern.compile(".*2.*5.*8.*"),
                Pattern.compile(".*3.*6.*9.*"), Pattern.compile(".*1.*2.*3.*"), Pattern.compile(".*4.*5.*6.*"),
                Pattern.compile(".*7.*8.*9.*"), Pattern.compile(".*1.*5.*9.*"), Pattern.compile(".*3.*5.*7.*") };

        // position
        private String o = "";
        private String x = "";

        // Constructor
        public TicTacToe(String input) {
            for (int i = 0; i < input.length(); i++) {
                if (input.charAt(i) == 'o') {
                    o = o + (i + 1);
                } else if (input.charAt(i) == 'x') {
                    x = x + (i + 1);
                }
            }
        }

        // Judge
        private char judge() {
            // Check o
            for (Pattern p : WIN_PATTERN) {
                if (p.matcher(o).matches()) {
                    return 'o';
                }
            }
            // Check x
            for (Pattern p : WIN_PATTERN) {
                if (p.matcher(x).matches()) {
                    return 'x';
                }
            }
            return 'd';
        }

        @Override
        public String toString() {
            return "o: " + o + ", x: " + x;
        }
    }
}