# 再帰関数解法 (愚直解) N, M = map(int, input().split()) S = [] for i in range(N): S.append([list(input()) for _ in range(M)]) import sys sys.setrecursionlimit(10**6) # 足りないかもしれない def rotate_90(grid: list[list]) -> list[list]: """概要: 2次元配列を時計回りに90度回転して返す。 入力: grid (list[list]): 元グリッド。 出力: list[list]: 回転後グリッド。 補足: 計算量は O(HW)。 """ H, W = len(grid), len(grid[0]) return [[grid[H - 1 - j][i] for j in range(H)] for i in range(W)] answer = 10**9 from collections import Counter def f(Map, N, ans = 105, S = S): if N == 0: ans = sum([s[1] for s in [Counter(s) for s in Map]]) return ans N -= 1 tmp = 105 for i in range(4): S[N] = rotate_90(S[N]) NMap = [row[:] for row in Map] for j in range(M): for k in range(M): if S[N][j][k] == '#': NMap[j][k] = 1 tmp = min(tmp, f(NMap, N)) return tmp answer = f([[0]*M for _ in range(M)], N) print(answer)