#include <bits/stdc++.h>
#define FOR(i,a,b) for(int i=(a);i<(b);i++)
#define RFOR(i,a,b) for(int i=(b) - 1;i>=(a);i--)
#define REP(i,n) for(int i=0;i<(n);i++)
#define RREP(i,n) for(int i=n-1;i>=0;i--)

#define PB push_back
#define INF INT_MAX/3
#define ALL(a) (a).begin(),(a).end()
#define RALL(a) (a).rbegin(),(a).rend()
#define CLR(a) memset(a,0,sizeof(a))

typedef long long int ll;

using namespace std;

int main(){
    while(true){
	int n;
	int dp[2][111] = {10000000};
	vector<int> a[2];
	cin >> n;
	if(n==0) break;
	REP(i,n){
	    int temp;
	    cin >> temp;
	    a[0].PB(temp);
	}
	REP(i,n){
	    int temp;
	    cin >> temp;
	    a[1].PB(temp);
	}

	int d[] = {0,1,2};
	REP(i,2)REP(j,111)dp[i][j] = 10000000;
	queue<int> p;
	queue<int> w;
	p.push(0);
	p.push(0);
	w.push(0);
	w.push(1);
	dp[0][0] = 0;
	dp[1][0] = 0;
	while(!p.empty()){
	    int i = p.front();
	    int ww = w.front();
	    if(i == 0){
		while(a[ww][i]==1){
		    i++;
		    if(i==n||a[ww][i]!=1){
			i--;
			dp[ww][i] = 0;
			break;
		    }
		}
	    }
	    p.pop();
	    w.pop();
	    REP(k,3){
		int ni = i + d[k];
		int num = (ww+1)%2;
		if(ni>=n) break;
		while(a[num][ni]==1){
		    ni++;
		    if(ni==n || a[num][ni]!=1){
			ni--;
			break;
		    }
		}
		while(a[num][ni]==2){
		    ni--;
		    if(ni==0) break;
		}
		if((dp[ww][i]+1)<dp[num][ni]){
		    dp[num][ni] = dp[ww][i]+1;
		    p.push(ni);
		    w.push(num);
		}
	    }
	}
	int ans = 10000000;
	REP(j,2){
	    ans = min(ans,dp[j][n-1]);
	}
	if(ans >= 10000000) cout << "NA" << endl;
	else cout << ans << endl;
    }
    return 0;
}