MOD = 10 ** 18 + 3 N, U = map(int, input().split()) H, W = map(int, input().split()) HW = H * W p2 = [0] * HW p2[0] = 1 for i in range(1, HW): p2[i] = p2[i - 1] * 2 if p2[i] >= MOD: p2[i] -= MOD S = [[] for i in range(N)] d, ds = dict(), dict() for x in range(N): F = int(input()) for i in range(H): S[x] += list(input()) h = 0 for i in range(HW): if S[x][i] == '#': h += p2[i] if h >= MOD: h -= MOD if h not in d: d[h] = 0 ds[h] = (x, -1) d[h] += (1 if x < U else -1) if F == 1: for i in range(HW): hi = h + (-1 if S[x][i] == '#' else 1) * p2[i] if hi >= MOD: hi -= MOD if hi < 0: hi += MOD if hi not in d: d[hi] = 0 ds[hi] = (x, i) d[hi] += (1 if x < U else -1) val_max, h_max= -1000, -1 for i in range(1 << min(HW, 20)): if i not in d: val_max, h_max = 0, i break for h, val in d.items(): if val_max < val: val_max, h_max = val, h print(val_max) if h_max not in d: for i in range(H): print('#' if j < 20 and (h_max >> j) & 1 else '.' for j in range(i * W, (i + 1) * W)) else: x, p = ds[h_max] if p != -1: S[x][p] = ('#' if S[x][p] == '.' else '.') for i in range(H): print("".join(S[x][i * W : (i + 1) * W]))