Problem:
縦 8、横 8 のマスからなる図1 のような平面があります。その平面上に、いくつかの爆弾が置かれています。図2 にその例を示します（● = 爆弾）。  | □| □| □| □| □| □| □| □   ---|---|---|---|---|---|---|---   □| □| □| □| □| □| □| □   □| □| □| □| □| □| □| □   □| □| □| □| □| □| □| □   □| □| □| □| □| □| □| □   □| □| □| □| □| □| □| □   □| □| □| □| □| □| □| □   □| □| □| □| □| □| □| □   | □| □| □| ●| □| □| ●| □   ---|---|---|---|---|---|---|---   □| □| □| □| □| ●| □| □   ●| □| □| □| ●| □| □| ●   □| □| ●| □| □| □| ●| □   □| ●| □| □| □| □| □| □   □| □| □| □| ●| □| □| □   ●| □| ●| □| □| □| ●| □   □| ●| □| ●| □| □| ●| □   図1| 図2       爆弾が爆発すると、その爆弾の上下左右 3 マスに爆風の影響が及び、それらのマスに置かれている爆弾も連鎖的に爆発します。たとえば、図 3 に示す爆弾が爆発すると図 4 の■のマスに爆風の影響が及びます。  | □| □| □| □| □| □| □| □   ---|---|---|---|---|---|---|---   □| □| □| □| □| □| □| □   □| □| □| □| □| □| □| □   □| □| □| □| □| □| □| □   □| □| □| □| □| □| □| □   □| □| □| ●| □| □| □| □   □| □| □| □| □| □| □| □   □| □| □| □| □| □| □| □   | □| □| □| □| □| □| □| □   ---|---|---|---|---|---|---|---   □| □| □| □| □| □| □| □   □| □| □| ■| □| □| □| □   □| □| □| ■| □| □| □| □   □| □| □| ■| □| □| □| □   ■| ■| ■| ●| ■| ■| ■| □   □| □| □| ■| □| □| □| □   □| □| □| ■| □| □| □| □   図3| 図4       爆弾が置かれている状態と最初に爆発する爆弾の位置を読み込んで、最終的な平面の状態を出力するプログラムを作成してください。

Incorrect submission (verdict: Wrong Answer):
# -*- coding: utf-8 -*-
"""
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0071
"""
import sys


def check_bombs(map, pos, dir, range=3):
    
    if dir == 'up':
        x, y = pos
        while range > 0 and y > 0:
            if map[y-1][x] == '1':
                return (x, y-1)
            else:
                y -= 1
                range -= 1
    elif dir == 'down':
        x, y = pos
        while range > 0 and y < len(map)-1:
            if map[y+1][x] == '1':
                return (x, y+1)
            else:
                y += 1
                range -= 1
    elif dir == 'left':
        x, y = pos
        while range > 0 and x > 0:
            if map[y][x-1] == '1':
                return (x-1, y)
            else:
                x -= 1
                range -= 1
    elif dir == 'right':
        x, y = pos
        while range > 0 and x < len(map[0])-1:
            if map[y][x+1] == '1':
                return (x+1, y)
            else:
                x += 1
                range -= 1
    else:
        return None


def chain_bombs(map, init_pos):
    
    lmap = map[:]               
    detonated = [init_pos]      
    while detonated:
        x, y = detonated.pop()
        lmap[y][x] = '0'
        res = check_bombs(lmap, (x, y), 'up')
        if res:
            detonated.append(res)
        res = check_bombs(lmap, (x, y), 'down')
        if res:
            detonated.append(res)
        res = check_bombs(lmap, (x, y), 'left')
        if res:
            detonated.append(res)
        res = check_bombs(lmap, (x, y), 'right')
        if res:
            detonated.append(res)
    return lmap


def main(args):
    data_set = int(input())
    maps = []
    init_pos = []
    for i in range(data_set):
        _ = input()
        maps.append([list(input().strip()) for _ in range(8)])
        init_pos.append([int(input())-1, int(input())-1]) 

    count = 1
    for map, pos in zip(maps, init_pos):
        result = chain_bombs(map, pos)
        print('Data {}:'.format(count))
        for row in result:
            print(''.join(row))


if __name__ == '__main__':
    main(sys.argv[1:])

Fixed, accepted submission:
# -*- coding: utf-8 -*-
"""
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0071
"""
import sys


def check_bombs(map, pos, dir, range=3):
    
    if dir == 'up':
        x, y = pos
        while range > 0 and y > 0:
            if map[y-1][x] == '1':
                return (x, y-1)
            else:
                y -= 1
                range -= 1
    elif dir == 'down':
        x, y = pos
        while range > 0 and y < len(map)-1:
            if map[y+1][x] == '1':
                return (x, y+1)
            else:
                y += 1
                range -= 1
    elif dir == 'left':
        x, y = pos
        while range > 0 and x > 0:
            if map[y][x-1] == '1':
                return (x-1, y)
            else:
                x -= 1
                range -= 1
    elif dir == 'right':
        x, y = pos
        while range > 0 and x < len(map[0])-1:
            if map[y][x+1] == '1':
                return (x+1, y)
            else:
                x += 1
                range -= 1
    else:
        return None


def chain_bombs(map, init_pos):
    
    lmap = map[:]               
    detonated = [init_pos]      
    while detonated:
        x, y = detonated.pop()
        lmap[y][x] = '0'
        res = check_bombs(lmap, (x, y), 'up')
        if res:
            detonated.append(res)
        res = check_bombs(lmap, (x, y), 'down')
        if res:
            detonated.append(res)
        res = check_bombs(lmap, (x, y), 'left')
        if res:
            detonated.append(res)
        res = check_bombs(lmap, (x, y), 'right')
        if res:
            detonated.append(res)
    return lmap


def main(args):
    data_set = int(input())
    maps = []
    init_pos = []
    for i in range(data_set):
        _ = input()
        maps.append([list(input().strip()) for _ in range(8)])
        init_pos.append([int(input())-1, int(input())-1]) 

    count = 1
    for map, pos in zip(maps, init_pos):
        result = chain_bombs(map, pos)
        print('Data {}:'.format(count))
        for row in result:
            print(''.join(row))
        count += 1


if __name__ == '__main__':
    main(sys.argv[1:])