Problem:
お菓子の魔女 CHARLOTTE は _巴マミ_ とクッキーゲームを楽しんでいる．クッキーゲームは 8\times 8 の格子状に区切られたテーブルクロスの上にチーズクッキーとチョコレートクッキーを置いて行われる．各格子には高々 1 個のチョコレートクッキーまたはチーズクッキーしか置くことはできない．  お菓子の魔女はチーズクッキーを， _巴マミ_ はチョコレートクッキーを交互に置いてゲームを行う．自分のクッキーを置いたあと，そのクッキーから上下左右斜めの各 8 方向について，置くクッキーとすでに置いていた自分のクッキーの間に相手のクッキーのみが直線に並んでいた場合に，その挟まれた相手のクッキーのすべてが自分のクッキーで置き換えられる．クッキーゲームのプレイヤーは自分のターンが回ってきた時，1 つ自分のクッキーを置くことができる．ただし，相手のクッキーを少なくとも 1 つ以上自分のクッキーに置き換えられなければならない．そのような置き場がない場合，自分のターンをパスをしなければならない．  お菓子の魔女も _巴マミ_ も考えるのが少々苦手である．そこで，回ってきたターン毎にそのターンの中で置き換えられるクッキーの数を最大化することを考えることにした． _巴マミ_ のターンのときに置き換えられるクッキーの数を最大にするようなクッキーを置く場所の候補が複数ある場合は，より上の場所を，それでも複数ある場合はより左の場所を選択することにした．また同様に，お菓子の魔女のターンのときに候補が複数ある場合はより下の場所を，それでも複数ある場合はより右の場所を選択することにした．  テーブルクロスに置かれたクッキーの状態が与えられるので，巴マミからはじめ，彼女たちがそこからクッキーゲームを行い，共に新たなクッキーが置けなくなるまでゲームを続けた時のテーブルクロスの上に置かれたクッキーの状態を求めよ．

Incorrect submission (verdict: Wrong Answer):
def search(c,a,b):
    r={'o':'x','x':'o'}
    ans=0
    direct=((-1,-1),(-1,0),(-1,1),(0,-1),(0,1),(1,-1),(1,0),(1,1))
    for d in range(8):
        y,x=a,b
        i,j=direct[d]
        while s[y+i][x+j]==r[c]:
            y+=i
            x+=j
        if s[y+i][x+j]==c:
            ans+=max(abs(y-a),abs(x-b))

    return ans

def mami():
    m=0
    a=b=-1
    for i in range(1,9):
        for j in range(1,9):
            if s[i][j]=='.':
                t=search('o',i,j)
                if t>m:
                    m=t
                    a,b=i,j
    return(a,b)

def char():
    m=1
    a=b=-1
    for i in range(1,9):
        for j in range(1,9):
            if s[i][j]=='.':
                t=search('x',i,j)
                if t>=m:
                    m=t
                    a,b=i,j
    return(a,b)

def rev(c,a,b):
    #s[a][b]=c
    r={'o':'x','x':'o'}
    direct=((-1,-1),(-1,0),(-1,1),(0,-1),(0,1),(1,-1),(1,0),(1,1))
    for d in range(8):
        y,x=a,b
        i,j=direct[d]
        while s[y+i][x+j]==r[c]:
            y+=i
            x+=j
        if s[y+i][x+j]==c:
            #i,j=direct[d]
            y,x=a+i,b+j
            while s[y][x]==r[c]:
                s[y][x]=c
                y+=i
                x+=j
    s[a][b]=c

s=[['.']*10]
for _ in range(8):
    s.append(['.']+list(input())+['.'])
s=tuple(s+[['.']*10])

while 1:
    a,b=mami()
    if a>0:
        rev('o',a,b)
    c,d=char()
    if c>0:
        rev('x',c,d)
    if all(i==-1for i in(a,b,c,d)):
        break
for t in s:
    print(*t[1:9],sep='')


Fixed, accepted submission:
def search(c,a,b):
    r={'o':'x','x':'o'}
    ans=0
    direct=((-1,-1),(-1,0),(-1,1),(0,-1),(0,1),(1,-1),(1,0),(1,1))
    for d in range(8):
        y,x=a,b
        i,j=direct[d]
        while s[y+i][x+j]==r[c]:
            y+=i
            x+=j
        if s[y+i][x+j]==c:
            ans+=max(abs(y-a),abs(x-b))

    return ans

def mami():
    m=0
    a=b=-1
    for i in range(1,9):
        for j in range(1,9):
            if s[i][j]=='.':
                t=search('o',i,j)
                if t>m:
                    m=t
                    a,b=i,j
    return(a,b)

def char():
    m=1
    a=b=-1
    for i in range(1,9):
        for j in range(1,9):
            if s[i][j]=='.':
                t=search('x',i,j)
                if t>=m:
                    m=t
                    a,b=i,j
    return(a,b)

def rev(c,a,b):
    #s[a][b]=c
    r={'o':'x','x':'o'}
    direct=((-1,-1),(-1,0),(-1,1),(0,-1),(0,1),(1,-1),(1,0),(1,1))
    for d in range(8):
        y,x=a,b
        i,j=direct[d]
        while s[y+i][x+j]==r[c]:
            y+=i
            x+=j
        if s[y+i][x+j]==c:
            #i,j=direct[d]
            y,x=a+i,b+j
            while s[y][x]==r[c]:
                s[y][x]=c
                y+=i
                x+=j
    s[a][b]=c

s=[['.']*10]
for _ in range(8):
    s.append(['.']+list(input())+['.'])
s=tuple(s+[['.']*10])

while 1:
    a,b=mami()
    if a>0:
        rev('o',a,b)
    c,d=char()
    if c>0:
        rev('x',c,d)
    if all(i==-1for i in(a,b,c,d)):
        break
for t in s[1:-1]:
    print(*t[1:9],sep='')