#include using namespace std; using ll = long long; int main() { ll N; cin >> N; vector S(N); for (ll i = 0; i < N; ++i) { cin >> S[i]; } string start_S = ""; for (ll i = 0; i < N; ++i) { start_S += S[i]; } string goal_S = ""; for (ll i = 0; i < N; ++i) { for (ll j = 0; j < N; ++j) goal_S += '.'; for (ll j = 0; j < N; ++j) goal_S += '#'; } map dist; queue q; dist[start_S] = 0; q.push(start_S); ll dy[] = {1, 0}; ll dx[] = {0, 1}; while (!q.empty()) { string cur = q.front(); q.pop(); if (cur == goal_S) { cout << dist[cur] << endl; return 0; } for (ll i = 0; i < N; ++i) { for (ll j = 0; j < 2 * N; ++j) { ll u = i * 2 * N + j; for (ll dir = 0; dir < 2; ++dir) { ll ni = i + dy[dir]; ll nj = j + dx[dir]; if (ni < N && nj < 2 * N) { ll v = ni * 2 * N + nj; if (cur[u] != cur[v]) { string nxt = cur; swap(nxt[u], nxt[v]); if (!dist.count(nxt)) { dist[nxt] = dist[cur] + 1; q.push(nxt); } } } } } } } return 0; }