#include <bits/stdc++.h>

using namespace std;

#define REP(i, n) for (int i=0; i<(n); ++i)
#define RREP(i, n) for (int i=(int)(n)-1; i>=0; --i)
#define FOR(i, a, n) for (int i=(a); i<(n); ++i)
#define RFOR(i, a, n) for (int i=(int)(n)-1; i>=(a); --i)

#define SZ(x) ((int)(x).size())
#define all(x) begin(x),end(x)

#define dump(x) cerr<<#x<<" = "<<(x)<<endl
#define debug(x) cerr<<#x<<" = "<<(x)<<" (L"<<__LINE__<<")"<<endl;

template<class T>
ostream &operator<<(ostream &os, const vector <T> &v) {
    os << "[";
    REP(i, SZ(v)) {
        if (i) os << ", ";
        os << v[i];
    }
    return os << "]";
}

template<class T, class U>
ostream &operator<<(ostream &os, const pair <T, U> &p) {
    return os << "(" << p.first << " " << p.second << ")";
}

template<class T>
bool chmax(T &a, const T &b) {
    if (a < b) {
        a = b;
        return true;
    }
    return false;
}

template<class T>
bool chmin(T &a, const T &b) {
    if (b < a) {
        a = b;
        return true;
    }
    return false;
}

using ll = long long;
using ull = unsigned long long;
using ld = long double;
using P = pair<int, int>;
using vi = vector<int>;
using vll = vector<ll>;
using vvi = vector<vi>;
using vvll = vector<vll>;

const ll MOD = 1e9 + 7;
const int INF = INT_MAX / 2;
const ll LINF = LLONG_MAX / 2;
const ld eps = 1e-9;


int main() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(10);

    const int dy[] = {1, 0, -1, 0, 1, 1, -1, -1},
              dx[] = {0, 1, 0, -1, 1, -1, 1, -1};

    for (;;) {
        int n; cin >> n;
        if (n == 0) break;

        string a;
        int si, sj;
        REP(i, n) {
            string s; cin >> s;
            a += s;
            REP(j, n) {
                if (s[j] == '@') {
                    si = i, sj = j;
                }
            }
        }

        queue<tuple<string,int,int>> que;
        map<tuple<string,int,int>,int> dist;
        que.emplace(a, si, sj);
        dist[make_tuple(a, si, sj)] = 0;

        int ans = -1;

        while (!que.empty()) {
            string board;
            int si, sj;
            int d = dist[que.front()];
            tie(board, si, sj) = que.front();
            que.pop();

            bool finish = true;
            REP(i, n*n) {
                if (board[i] == '#') {
                    finish = false;
                    break;
                }
            }
            if (finish) {
                ans = d;
                break;
            }

            REP(k, 8) {
                string tmp = board;
                int y = si + dy[k], x = sj + dx[k];
                if (y < 0 or x < 0 or n <= y or n <= x or
                    tmp[y*n + x] == '#') continue;
                tmp[y*n + x] = '@';
                tmp[si*n + sj] = '.';
                string nxt;
                REP(i, n) {
                    REP(j, n) {
                        if (i == y and j == x) {
                            nxt += '@';
                            continue;
                        }
                        int cnt = 0;
                        REP(t, 8) {
                            int y = i + dy[t], x = j + dx[t];
                            if (y < 0 or x < 0 or n <= y or n <= x) continue;
                            cnt += tmp[y*n + x] != '.';
                        }
                        if (tmp[i*n + j] == '#' and (cnt == 2 or cnt == 3)) {
                            nxt += '#';
                        } else if (tmp[i*n + j] == '.' and cnt == 3) {
                            nxt += '#';
                        } else {
                            nxt += '.';
                        }
                    }
                }
                if (dist.count(make_tuple(nxt, y, x)) == 0) {
                    dist[make_tuple(nxt, y, x)] = d + 1;
                    que.emplace(nxt, y, x);
                } else if (chmin(dist[make_tuple(nxt, y, x)], d + 1)){
                    que.emplace(nxt, y, x);
                }
            }
        }

        cout << ans << endl;
    }

    return 0;
}



Measured memory_bytes: 7080