Загрузка данных


import sys

def main():
    data = sys.stdin.buffer.read().split()
    n, m, k = map(int, data[:3])
    grid = data[3:3 + n]

    size = n * m
    parent = list(range(size))

    def find(x):
        while parent[x] != x:
            parent[x] = parent[parent[x]]
            x = parent[x]
        return x

    def union(a, b):
        ra = find(a)
        rb = find(b)
        if ra != rb:
            parent[rb] = ra

    for r in range(n):
        for c in range(m):
            color = grid[r][c]
            if color == ord('B'):
                continue

            idx = r * m + c
            if r > 0 and grid[r - 1][c] == color:
                union(idx, idx - m)
            if c > 0 and grid[r][c - 1] == color:
                union(idx, idx - 1)

    component = [0] * size
    ids = {}
    next_id = 0

    for i in range(size):
        r, c = divmod(i, m)
        if grid[r][c] == ord('B'):
            component[i] = next_id
            next_id += 1
        else:
            root = find(i)
            if root not in ids:
                ids[root] = next_id
                next_id += 1
            component[i] = ids[root]

    per_layer = 2 * (n + m)
    for r in range(n):
        for c in range(m):
            i = r * m + c
            if r + 1 < n and component[i] != component[i + m]:
                per_layer += 1
            if c + 1 < m and component[i] != component[i + 1]:
                per_layer += 1

    blue_count = sum(row.count(b'B') for row in grid)
    between_layers = size - blue_count

    answer = k * per_layer + 2 * size + (k - 1) * between_layers
    print(answer)

if __name__ == "__main__":
    main()