#include <bits/stdc++.h>
constexpr int N = 55;
int n;
char a[N][N];
int f[N][N][N][N];
int dfs(int x, int y, int xx, int yy) {
  if (~f[x][y][xx][yy]) {
    return f[x][y][xx][yy];
  } else {
    if (x == xx && y == yy) {
      return f[x][y][x][y] = (a[x][y] == '#');
    } else {
      int res = std::max(xx - x + 1, yy - y + 1);
      for (int i = x; i < xx; i++) {
        res = std::min(res, dfs(x, y, i, yy) + dfs(i + 1, y, xx, yy));
      }
      for (int i = y; i < yy; i++) {
        res = std::min(res, dfs(x, y, xx, i) + dfs(x, i + 1, xx, yy));
      }
      return f[x][y][xx][yy] = res;
    }
  }
}
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  memset(f, -1, sizeof f);
  std::cin >> n;
  for (int i = 0; i < n; i++) {
    std::cin >> a[i];
  }
  std::cout << dfs(0, 0, n - 1, n - 1) << "\n";
  return 0;
}
