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 C# (judge verdict: Accepted)

using System;
class aoj
{
    static void Main()
    {

        while (true)
        {
            char g='k';
            string a = Console.ReadLine();
            if (String.IsNullOrEmpty(a)) break;
            char[,] b = new char[3,3];
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    b[i,j] = a[i * 3 + j];
                }
            }
            for (int i = 0; i < 3; i++)
            {
                if (b[i,0] == b[i,1] && b[i,1] == b[i,2] && b[i,2] != 's') { g = b[i,0];  goto stop;}
            }
            for (int i = 0; i < 3; i++)
            {
                if (b[0,i] == b[1,i] && b[1,i] == b[2,i] && b[2,i] != 's') { g = b[0, i]; goto stop; }
            }
            if (b[0,0] == b[1,1] && b[1,1] == b[2,2] && b[2,2] != 's') { g = b[0,0]; goto stop; }
            if (b[0,2] == b[1,1] && b[1,1] == b[2,0] && b[2,0] != 's') { g= b[0,2];  goto stop; }
            g = 'd';
            stop:;
            Console.WriteLine(g);
        }
    }
}