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 {

    static char bingo (char[] line, int a1, int a2, int a3) {

        if (line[a1] == line[a2] && line[a2] == line[a3]) {
            return line[a1];
        }

        return '?';

    }

    static char solve (char[] line) {
        char res = 'd';
        for(int i = 0; i < 3; i++) {
            res = bingo(line, 3 * i, 3 * i + 1, 3 * i + 2);
            if (res == 'o' || res == 'x') {
                return res;
            }
            res = bingo(line, i, 3 + i, 6 + i);
            if (res == 'o' || res == 'x') {
                return res;
            }
        }

        res = bingo(line, 0, 4, 8);
        if (res == 'o' || res == 'x') {
            return res;
        }
        res = bingo(line, 2, 4, 6);
        if (res == 'o' || res == 'x') {
            return res;
        }
        
        return 'd';

    }

    public static void main (String [] args) {

        Scanner sc = new Scanner(System.in);

        while(sc.hasNext()) {
            char res = solve(sc.nextLine().toCharArray());
            System.out.println(res);
        }

    }
}