def solve(H, W, world, stamp):
S = max(H, W)
# world
WW = W + 2 * S
WH = H + 2 * S
# stamp
SW = W
SH = H
def conflict():
for x in range(SW):
for y in range(SH):
if stamp[y * SW + x] == 0:
if world[(sy + y) * WW + (sx + x)] == 0:
# conflict
return True
for _rot in range(4):
for sx in range(S + W):
for sy in range(S + H):
if conflict():
continue
return True
# rotate
new_stamp = [0] * (W * H)
for x in range(SH):
for y in range(SW):
new_stamp[y * SH + x] = stamp[(SH - 1 - x) * SW + y]
stamp = new_stamp
SW, SH = SH, SW
return False