from itertools import product from bisect import bisect_left, bisect_right N = int(input()) S = [list(input()) for _ in range(N)] mikakutei = [] for i in range(N): for j in range(i + 1, N): if S[i][j] == '-': mikakutei.append((i, j)) for i in range(N): for j in range(N): if S[i][j] == 'o': S[i][j] = 1 elif S[i][j] == 'x': S[i][j] = 0 M = len(mikakutei) ans = [] for pat in product([0, 1], repeat=M): # S の塗り替え for k in range(M): # mikakutei[k] i, j = mikakutei[k] # pat[k] で塗る S[i][j] = pat[k] # 対応する試合も塗る S[j][i] = 1 - pat[k] # 集計 cnt = [] memo = 0 for i in range(N): sub = S[i].count(1) if i == 0: memo = sub cnt.append(sub) cnt.sort() juni = N - bisect_right(cnt, memo) + 1 ans.append(juni) # S の戻し for k in range(M): # mikakutei[k] i, j = mikakutei[k] # pat[k] で塗る S[i][j] = '-' print(min(ans))