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;

namespace _0066
{
    class Program
    {
        readonly static int CELL_NUMBER = 9;
        static void Main(string[] args)
        {

            while (true)
            {
               var inputString = Console.ReadLine();
                if (string.IsNullOrEmpty(inputString))
                {
                    break;
                }

                var answer = "d";
                var cellField = inputString.ToCharArray();
                if(IsWin(cellField,'o'))
                {
                    answer = "o";
                }else if(IsWin(cellField,'x'))
                {
                    answer = "x";
                }
                Console.WriteLine(answer);
            }
        }

        static bool IsWin(char[] cellField,char mark)
        {
            for (int i = 0; i < Math.Sqrt(CELL_NUMBER); i++)
            {
                if ((cellField[i] == mark)&&(cellField[i+(int)Math.Sqrt(CELL_NUMBER)*(1)] == mark)&&(cellField[i+(int)Math.Sqrt(CELL_NUMBER)*(2)] == mark))
                {
                       return true;
                }
                else if ((cellField[(int)Math.Sqrt(CELL_NUMBER) * (i)] == mark) && (cellField[(int)Math.Sqrt(CELL_NUMBER) * (i)+1] == mark) && (cellField[(int)Math.Sqrt(CELL_NUMBER) * (i)+2] == mark))
                {
                    return true;              
                }
            }
            if ((cellField[0] == mark) && (cellField[4] == mark) && (cellField[8] == mark))
            {
                return true;
            }
            else if ((cellField[2] == mark) && (cellField[4] == mark) && (cellField[6] == mark))
            {
                return true;           
            }
            return false;
        }
    }
}