# your code goes here
input = ["5, 5","F,2,1","F,2,3", "F,2,4", "F,0,4"]
i = 0
rows, cols = 0, 0
grid = [[]]
for line in input:
if i == 0:
temp = line.split(",")
rows = int(temp[0])
cols = int(temp[1])
grid = [['B']*cols for _ in range(rows)]
else:
temp = line.split(",")
c = temp[0]
x = int(temp[1])
y = int(temp[2])
grid[y][x] = c
i += 1
leftPrefix = [[0]*cols for _ in range(rows)]
rightPrefix = [[0]*cols for _ in range(rows)]
topPrefix = [[0]*cols for _ in range(rows)]
bottomPrefix = [[0]*cols for _ in range(rows)]
#left
for i in range(0, rows):
if grid[i][0] == 'F':
leftPrefix[i][0] = 1
for j in range(1, cols):
if grid[i][j] == 'B':
leftPrefix[i][j] = leftPrefix[i][j-1]
elif grid[i][j] == 'F':
leftPrefix[i][j] = leftPrefix[i][j-1] + 1
#right
for i in range(0, rows):
if grid[i][cols-1] == 'F':
rightPrefix[i][cols-1] = 1
for j in range(cols-2, -1, -1):
if grid[i][j] == 'B':
rightPrefix[i][j] = rightPrefix[i][j+1]
elif grid[i][j] == 'F':
rightPrefix[i][j] = rightPrefix[i][j+1] + 1
# topPrefix
for i in range(0, rows):
if i == 0:
for j in range(0, cols):
topPrefix[i][j] = 1 if grid[i][j] == 'F' else 0
else:
for j in range(0, cols):
if grid[i][j] == 'B':
topPrefix[i][j] = topPrefix[i-1][j]
elif grid[i][j] == 'F':
topPrefix[i][j] = topPrefix[i-1][j] + 1
# bottom
for i in range(rows-1, -1, -1):
if i == rows-1:
for j in range(0, cols):
bottomPrefix[i][j] = 1 if grid[i][j] == 'F' else 0
else:
for j in range(0, cols):
if grid[i][j] == 'B':
bottomPrefix[i][j] = bottomPrefix[i+1][j]
elif grid[i][j] == 'F':
bottomPrefix[i][j] = bottomPrefix[i+1][j] + 1
output = [['B']*cols for _ in range(rows)]
overAll = [[0]*cols for _ in range(rows)]
for i in range(0, rows):
for j in range(0, cols):
output[i][j] = grid[i][j]
maxm = 0
for i in range(0, rows):
for j in range(0, cols):
if grid[i][j] != 'B':
continue
left = leftPrefix[i][j-1] if j-1>=0 else 0
right = rightPrefix[i][j+1] if j+1<cols else 0
top = topPrefix[i-1][j] if i-1>=0 else 0
bottom = bottomPrefix[i+1][j] if i+1<rows else 0
overAll[i][j] = left + right + top + bottom
maxm = max(maxm, overAll[i][j])
for i in range(0, rows):
for j in range(0, cols):
if overAll[i][j] == maxm and grid[i][j] == 'B':
output[i][j] = '*'
print "\n".join("".join(str(el) for el in r) for r in output)
IyB5b3VyIGNvZGUgZ29lcyBoZXJlCmlucHV0ID0gWyI1LCA1IiwiRiwyLDEiLCJGLDIsMyIsICJGLDIsNCIsICJGLDAsNCJdCmkgPSAwCnJvd3MsIGNvbHMgPSAwLCAwCmdyaWQgPSBbW11dCmZvciBsaW5lIGluIGlucHV0OgogICAgaWYgaSA9PSAwOgogICAgICAgIHRlbXAgPSBsaW5lLnNwbGl0KCIsIikKICAgICAgICByb3dzID0gaW50KHRlbXBbMF0pCiAgICAgICAgY29scyA9IGludCh0ZW1wWzFdKQogICAgICAgIGdyaWQgPSBbWydCJ10qY29scyBmb3IgXyBpbiByYW5nZShyb3dzKV0KICAgIGVsc2U6CiAgICAgICAgdGVtcCA9IGxpbmUuc3BsaXQoIiwiKQogICAgICAgIGMgPSB0ZW1wWzBdCiAgICAgICAgeCA9IGludCh0ZW1wWzFdKQogICAgICAgIHkgPSBpbnQodGVtcFsyXSkKICAgICAgICBncmlkW3ldW3hdID0gYwogICAgaSArPSAxCgpsZWZ0UHJlZml4ID0gW1swXSpjb2xzIGZvciBfIGluIHJhbmdlKHJvd3MpXQpyaWdodFByZWZpeCA9IFtbMF0qY29scyBmb3IgXyBpbiByYW5nZShyb3dzKV0KdG9wUHJlZml4ID0gW1swXSpjb2xzIGZvciBfIGluIHJhbmdlKHJvd3MpXQpib3R0b21QcmVmaXggPSBbWzBdKmNvbHMgZm9yIF8gaW4gcmFuZ2Uocm93cyldCgojbGVmdApmb3IgaSBpbiByYW5nZSgwLCByb3dzKToKCWlmIGdyaWRbaV1bMF0gPT0gJ0YnOgoJCWxlZnRQcmVmaXhbaV1bMF0gPSAxCglmb3IgaiBpbiByYW5nZSgxLCBjb2xzKToKCQlpZiBncmlkW2ldW2pdID09ICdCJzoKCQkJbGVmdFByZWZpeFtpXVtqXSA9IGxlZnRQcmVmaXhbaV1bai0xXQoJCWVsaWYgZ3JpZFtpXVtqXSA9PSAnRic6CgkJCWxlZnRQcmVmaXhbaV1bal0gPSBsZWZ0UHJlZml4W2ldW2otMV0gKyAxCgojcmlnaHQKZm9yIGkgaW4gcmFuZ2UoMCwgcm93cyk6CglpZiBncmlkW2ldW2NvbHMtMV0gPT0gJ0YnOgoJCXJpZ2h0UHJlZml4W2ldW2NvbHMtMV0gPSAxCglmb3IgaiBpbiByYW5nZShjb2xzLTIsIC0xLCAtMSk6CgkJaWYgZ3JpZFtpXVtqXSA9PSAnQic6CgkJCXJpZ2h0UHJlZml4W2ldW2pdID0gcmlnaHRQcmVmaXhbaV1baisxXQoJCWVsaWYgZ3JpZFtpXVtqXSA9PSAnRic6CgkJCXJpZ2h0UHJlZml4W2ldW2pdID0gcmlnaHRQcmVmaXhbaV1baisxXSArIDEKCQkJCiMgdG9wUHJlZml4IApmb3IgaSBpbiByYW5nZSgwLCByb3dzKToKCWlmIGkgPT0gMDoKCQlmb3IgaiBpbiByYW5nZSgwLCBjb2xzKToKCQkJdG9wUHJlZml4W2ldW2pdID0gMSBpZiBncmlkW2ldW2pdID09ICdGJyBlbHNlIDAKCWVsc2U6CgkJZm9yIGogaW4gcmFuZ2UoMCwgY29scyk6CgkJCWlmIGdyaWRbaV1bal0gPT0gJ0InOgoJCQkJdG9wUHJlZml4W2ldW2pdID0gdG9wUHJlZml4W2ktMV1bal0KCQkJZWxpZiBncmlkW2ldW2pdID09ICdGJzoKCQkJCXRvcFByZWZpeFtpXVtqXSA9IHRvcFByZWZpeFtpLTFdW2pdICsgMQoKIyBib3R0b20KZm9yIGkgaW4gcmFuZ2Uocm93cy0xLCAtMSwgLTEpOgoJaWYgaSA9PSByb3dzLTE6CgkJZm9yIGogaW4gcmFuZ2UoMCwgY29scyk6CgkJCWJvdHRvbVByZWZpeFtpXVtqXSA9IDEgaWYgZ3JpZFtpXVtqXSA9PSAnRicgZWxzZSAwCgllbHNlOgoJCWZvciBqIGluIHJhbmdlKDAsIGNvbHMpOgoJCQlpZiBncmlkW2ldW2pdID09ICdCJzoKCQkJCWJvdHRvbVByZWZpeFtpXVtqXSA9IGJvdHRvbVByZWZpeFtpKzFdW2pdCgkJCWVsaWYgZ3JpZFtpXVtqXSA9PSAnRic6CgkJCQlib3R0b21QcmVmaXhbaV1bal0gPSBib3R0b21QcmVmaXhbaSsxXVtqXSArIDEKCm91dHB1dCA9IFtbJ0InXSpjb2xzIGZvciBfIGluIHJhbmdlKHJvd3MpXQpvdmVyQWxsID0gW1swXSpjb2xzIGZvciBfIGluIHJhbmdlKHJvd3MpXQpmb3IgaSBpbiByYW5nZSgwLCByb3dzKToKCWZvciBqIGluIHJhbmdlKDAsIGNvbHMpOgoJCW91dHB1dFtpXVtqXSA9IGdyaWRbaV1bal0KCm1heG0gPSAwCmZvciBpIGluIHJhbmdlKDAsIHJvd3MpOgoJZm9yIGogaW4gcmFuZ2UoMCwgY29scyk6CgkJaWYgZ3JpZFtpXVtqXSAhPSAnQic6CgkJCWNvbnRpbnVlCgkJbGVmdCA9IGxlZnRQcmVmaXhbaV1bai0xXSBpZiBqLTE+PTAgZWxzZSAwCgkJcmlnaHQgPSByaWdodFByZWZpeFtpXVtqKzFdIGlmIGorMTxjb2xzIGVsc2UgMAoJCXRvcCA9IHRvcFByZWZpeFtpLTFdW2pdIGlmIGktMT49MCBlbHNlIDAKCQlib3R0b20gPSBib3R0b21QcmVmaXhbaSsxXVtqXSBpZiBpKzE8cm93cyBlbHNlIDAKCQlvdmVyQWxsW2ldW2pdID0gbGVmdCArIHJpZ2h0ICsgdG9wICsgYm90dG9tCgkJbWF4bSA9IG1heChtYXhtLCBvdmVyQWxsW2ldW2pdKQoKZm9yIGkgaW4gcmFuZ2UoMCwgcm93cyk6Cglmb3IgaiBpbiByYW5nZSgwLCBjb2xzKToKCQlpZiBvdmVyQWxsW2ldW2pdID09IG1heG0gYW5kIGdyaWRbaV1bal0gPT0gJ0InOgoJCQlvdXRwdXRbaV1bal0gPSAnKicKCnByaW50ICJcbiIuam9pbigiIi5qb2luKHN0cihlbCkgZm9yIGVsIGluIHIpIGZvciByIGluIG91dHB1dCkKCQk=