#include<iostream>
#include<vector>
#include<queue>
using namespace std;

const int inf = 1<<27;

struct State{
  int side;
  int now;
  int cost;
  State(int side, int now, int cost):side(side),now(now),cost(cost){}
};

int bfs(int side, const vector<int> &A, const vector<int> &B)
{
  int ret = inf;
  queue<State> Q;
  bool vis[2][A.size()];
  for(int i = 0; i < 2; ++i){
    for(int j = 0; j < (int)A.size(); ++j){
      vis[i][j] = false;
    }
  }
  int st=0;
  const vector<int> &vT = side==0?A:B;
  if(vT[0]==2)return inf;
  if(vT[0]==1){
    for(st = 0; st < (int)vT.size()-1; ++st){
      if(vT[st+1]!=1)break;
    }
  }
  //cout << "start : " << st<< endl;
  Q.push(State(side,st,0));
  while(!Q.empty()){
    State nst = Q.front();Q.pop();
    //cout << " side : " << nst.side << "now : " << nst.now << " cost : " << nst.cost << endl;
    if(nst.now==(int)B.size()-1)ret=min(ret,nst.cost);
    int ops = (nst.side==0)?1:0;
    for(int k=0;k<=2;++k){
      if(nst.now+k>=(int)B.size())continue;
      int next = nst.now + k;
      const vector<int> &T = ops==0?A:B; 
      if( T[next] == 0 ){
	if(!vis[ops][next]){
	  vis[ops][next]=true;
	  Q.push(State(ops,next,nst.cost+1));
	}
      }else if( T[next] == 1 ){
	int j;
	for(j = next; j < (int)T.size()-1; ++j){
	  if( T[j+1] != 1 ) break;
	}
	next=j;
	if(!vis[ops][next]){
	  vis[ops][next]=true;
	  Q.push(State(ops,next,nst.cost+1));
	}
      }else if( T[next] == 2 ){
	int j;
	for(j = next; j >= 1; --j){
	  if( T[j-1] != 2 ) break;
	}
	--j;
	next=j;
	if(next==0&&T[next]==2)return inf;
	if(!vis[ops][next]){
	  vis[ops][next]=true;
	  Q.push(State(ops,next,nst.cost+1));
	}
      }
    }
  }
  return ret;
}

int main()
{
  while(true){
    int n;
    vector<int> A,B;
    scanf("%d", &n);
    if( n == 0 ) break;
    for(int i = 0; i < n; ++i){
      int t; scanf("%d", &t); A.push_back(t);
    }
    for(int i = 0; i < n; ++i){
      int t; scanf("%d", &t); B.push_back(t);
    }
    int cost0 = bfs(0,A,B);
    int cost1 = bfs(1,A,B);
    int cost = min( cost0, cost1 );
    if( cost >= inf ){
      puts("NA");
    }else{
      printf("%d\n", cost);
    }
  }
  return 0;
}