#include<bits/stdc++.h>
using namespace std;
using Int = long long;
template<typename T1,typename T2> inline void chmin(T1 &a,T2 b){if(a>b) a=b;}
template<typename T1,typename T2> inline void chmax(T1 &a,T2 b){if(a<b) a=b;}

//INSERT ABOVE HERE

int dy[]={-1,-1,-1,0,1,1,1,0};
int dx[]={-1,0,1,1,1,0,-1,-1};
struct State{
  vector<string> st;
  State(int n):st(n){}

  int in(int y,int x) const{
    return 0<=y&&y<(int)st.size()&&0<=x&&x<(int)st[0].size();
  }

  State next() const{
    State res(*this);

    int n=st.size();
    for(int i=0;i<n;i++){
      for(int j=0;j<n;j++){
        if(st[i][j]=='@') continue;

        int cnt=0;
        for(int k=0;k<8;k++){
          int ny=i+dy[k],nx=j+dx[k];
          if(!in(ny,nx)) continue;
          if(st[ny][nx]!='.') cnt++;
        }

        res.st[i][j]='.';
        if(st[i][j]=='#'){
          if(cnt==2) res.st[i][j]='#';
          if(cnt==3) res.st[i][j]='#';
        }
        if(st[i][j]=='.'){
          if(cnt==3) res.st[i][j]='#';
        }
      }
    }
    return res;
  }

  vector<State> move() const{
    int n=st.size();
    int y=-1,x=-1;
    for(int i=0;i<n;i++)
      for(int j=0;j<n;j++)
        if(st[i][j]=='@') y=i,x=j;

    vector<State> adj;
    for(int k=0;k<8;k++){
      int ny=y+dy[k],nx=x+dx[k];
      if(!in(ny,nx)) continue;
      if(st[ny][nx]=='#') continue;
      State res(*this);
      swap(res.st[y][x],res.st[ny][nx]);
      adj.emplace_back(res.next());
    }
    return adj;
  }
};

signed main(){
  int n;
  while(cin>>n,n){
    State init(n);
    for(int i=0;i<n;i++) cin>>init.st[i];

    map<vector<string>, int> dist;
    queue<State> que;
    dist[init.st]=0;
    que.emplace(init);

    int ans=-1;
    while(!que.empty()){
      auto v=que.front();que.pop();

      int cnt=0;
      for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
          if(v.st[i][j]=='#') cnt++;
      if(cnt==0){
        ans=dist[v.st];
        break;
      }

      auto adj=v.move();
      for(auto u:adj){
        if(dist.count(u.st)) continue;
        dist[u.st]=dist[v.st]+1;
        que.emplace(u);
      }
    }
    cout<<ans<<endl;
  }
  return 0;
}

