/**	COPYRIGHT INFORMATION
 *	Author:	Lô Hồng (Dr_Unicorn)
 *	Email:	lohong2k3it@gmail.com
 *	School:	Hung Vuong High School for the Gifted, Phu Tho Province, Vietnam **/


/**

    手放したら二度と掴めねえんだよ

**/

#include <bits/stdc++.h>

//////////////////////////////////////////

#define y0                  sdkfaslhagaklsldk
#define y1                  aasdfasdfasdf
#define yn                  askfhwqriuperikldjk
#define j1                  assdgsdgasghsf
#define tm                  sdfjahlfasfh
#define lr                  asgasgash

//////////////////////////////////////////
/// --------------------- debug1(1) 1 biến (xuống dòng) -----------------------/////////////////
/**                                                                                                                                                                          **/#define debug1(a) cout << #a << " = " << a << "; "
        /**      ▄▄▄▄    ▄       ▄▄▄▄           ▄        ▄▄▄▄                                                                                                                        **/#define debug1l(a) cout << #a << " = " << a << "; " << '\n'
        /**      █   █   █      █    ▀         █ █     ▄▀    ▀                                                                                                                       **/#define debug2(a, b) cout << #a << " = " << a << "; " << #b << " = " << b << "; "
        /**      █    █  █      █             █   █    █                                                                                                                             **/#define debug2l(a, b) cout << #a << " = " << a << "; " << #b << " = " << b << "; " << '\n'
        /**      █   █   █       ▀▄▄▄        █     █   █                                                                                                                             **/#define debug3(a, b, c) cout << #a << " = " << a << "; " << #b << " = " << b << "; " << #c << " = " << c << "; "
        /**      █▀▀▀    █           █      █ ▀▀▀▀▀ █  █                                                                                                                             **/#define debug3l(a, b, c) cout << #a << " = " << a << "; " << #b << " = " << b << "; " << #c << " = " << c << "; " << '\n'
        /**      █       █           █      █       █  █      █                                                                                                                      **/#define debug4(a, b, c, d) cout << #a << " = " << a << "; " << #b << " = " << b << "; " << #c << " = " << c << "; " << #d << " = " << d << "; "
        /**      █       █▄▄▄▄  ▀▄▄▄▀       █       █   ▀▄▄▄▄▀                                                                                                                       **/#define debug4l(a, b, c, d) cout << #a << " = " << a << "; " << #b << " = " << b << "; " << #c << " = " << c << "; " << #d << " = " << d << "; " << '\n'


/// -------------------------------- End() -------------------------------------////////////////
//////////////////////////////////////////

#define ID(x, y)            (((x)-1) * (numRow) + (y))
#define CIDx(z)             ((z) / (numRow)) + ((z) % (numRow) != 0)
#define CIDy(z)             ((z) % (numRow)) + ((z) % (numRow) == 0) * (numRow)
#define FOR(i,a,b)          for(int i = (a); i <= (b); i ++)
#define MASK(i)             (1LL << (i))
#define BIT(x, i)           (((x) >> (i)) & 1)
#define SET_ON(x, i)        ((x) | MASK(i))
#define SET_OFF(x, i)       ((x) & ~MASK(i))
#define all(v)              (v).begin(),(v).end()
#define ii                  pair<int, int>
#define jj                  pair<int, ii>
#define xx                  pair<ii, ii>
#define fi                  first
#define se                  second
#define eps                 1e-11

/// #define int                 long long


#define task                "RP1"

//////////////////////////////////////////

        using namespace std;

/////////////////////////////////////

const int INF = (int)1e9;
const int mod = 1e9 + 7;
const int oo = 1e9 + 7;

/////////////////////////////////////



///   Dr_Unicorn -  Lô Hồng     /////
void IOS() {
    cin.tie() -> sync_with_stdio(0);
}
void FRE() {
    //freopen("E:/MakeTest/Test.txt","r",stdin);
    freopen(task".inp", "r", stdin);
    freopen(task".out", "w", stdout);
}
/**
    I Can Do Any Thing
        (\__/)
     ⠀  (•ㅅ•)
    　＿ノ ヽ ノ＼  __
   /　`/ ⌒Ｙ⌒ Ｙ　  ヽ
  ( 　(三ヽ人　 /　　 |
  |　ﾉ⌒＼ ￣￣ヽ　  ノ
  ヽ＿＿＿＞､＿＿_／
　　    ﾉ( 王 ﾉ〈
　　   /ﾐ`ー―彡\


**/
const int MAX_N = 55;
const int MAX_M = 1000010;
/**
    ----------------------- NOTE - Dr_Unicorn ---------------------
    Chào các đồng zí, các bạn đang xem code này thì các bạn phải thật và cực kì thật bình tĩnh
    Vì với thuật toán hãm tí tí tí như này mà AC đc mới siêu

    Với nhưng bài toán cần sử lý các hình học bé xong đến các hình học lớn thì ta phải dùng bottom up:
     + For size (kích thước)
     + Luôn có thể QHĐ = cách chẻ ngang và chẻ dọc hình để cập nhật đáp án luôn thành công
     + Và luôn đầy bất ngờ

**/

int n;
int Dp[MAX_N][MAX_N][MAX_N][MAX_N];

void maximum(int &a, const int &b) {
    if(a > b)
        a = b;
}

void IN() {

    cin >> n;
    memset(Dp, 0x3f, sizeof Dp);
    for(int i = 1; i <= n; i ++) {
        for(int j = 1; j <= n; j ++) {
            for(int wx = 1; i + wx - 1 <= n; wx ++) {
                for(int wy = 1; j + wy - 1 <= n; wy ++) {
                    Dp[i][j][i+wx-1][j+wy-1] = max(wx, wy);
                }
            }
        }
    }
    for(int i = 1; i <= n; i ++) {
        for(int j = 1; j <= n; j ++) {
            char x;
            cin >> x;
//            cout << Dp[i][j][i][j] << endl;
            Dp[i][j][i][j] = (x == '#');
        }
    }


    return;
}

void OUT() {

    for(int wx = 1; wx <= n; wx ++) {
        for(int wy = 1; wy <= n; wy ++) {
            if(wx == wy && wx == 1) continue;
            for(int i = 1; i + wx - 1 <= n; i ++ ) {
                for(int j = 1; j + wy - 1 <= n; j ++) {

                    int x = i + wx - 1;
                    int y = j + wy - 1;
                    for(int k = i; k < x; k ++) {
                        maximum(Dp[i][j][x][y], Dp[i][j][k][y] + Dp[k+1][j][x][y]);
                    }

                    for(int k = j; k < y; k ++) {
                        maximum(Dp[i][j][x][y], Dp[i][j][x][k] + Dp[i][k+1][x][y]);
                    }
                }
            }
        }
    }
    cout << Dp[1][1][n][n];
    return;
}
int main() {
    IOS();
    // FRE();
    IN();
    OUT();

    return 0;
}
/// Code Dream Magic Dr_Unicorn

/**
──────── Pls Don't hate me ───────────
─▄▄▄───────────▄▄▄▄▄▄▄────────────────
█▀░▀█──────▄▀▀▀░░░░░░░▀▀▄▄────────────
█░░░░█───▄▀░░░░░░░░░░░░░░░▀▄───────▄▄▄
█▄░░░▀▄▄▀░░██░░░░░░░░░░░░░░▀█────█▀▀░█
─█░░░░█▀░░░▀░░░░░░░░██░░░░░░▀█─▄█░░░░█
─▀█░░▄█░░░░░░░▄▄▄░░░░▀░░░░░░░███░░░░█▀
──█▄░█░░░░░▄███████▄░░░░░░░░░█▀░░░░▄▀─
──▀█░█░░░░▄██████████░░░░░░░▄█░░░░▄▀──
───███░░░░███████████░░░░░░▄█░░░░█▀───
────█░░░░░██████████▀░░░░░░█░░░░█▀────
────█░░░░░░▀███████▀░░░░░░░█▄▄▄▀──────
────█░░░░░░░░▀▀▀▀░░░░░░░░░░░▀█────────
────█░░░░░░░░░░░░░░░░░░░░░░░░█────────
────█░░░░░░░░░░░░░░░░░░░░░░░░█────────
────█░░░░░░░░░░░░░░░░░░░░░░░░█────────
──────────────────────────────────────
**/