#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
	
	while(true){
		int N;
		int Num[200];
		scanf("%d",&N);
		if(N==0)break;
		for(int i=0;i<2*N;i++)scanf("%d",&Num[i]);
		bool G[200][200];
		for(int i=0;i<2*N;i++){
			for(int j=0;j<2*N;j++){
				G[i][j]=false;
			}
		}
		for(int i=0;i<N;i++){
			if(Num[i]==0){
				for(int k=i+N;k<i+N+3&&k<2*N;k++){
					if(Num[k]==1){
						int j=k;
						while(j<2*N&&Num[j]==1){
							j++;
						}
						G[i][j-1]=true;
					}
					else if(Num[k]==2){
						int j=k;
						while(j>=N+1&&Num[j]==2){
							j--;
						}
						G[i][j]=true;
					}
					else{
						G[i][k]=true;
					}
				}
			}
			else if(Num[i]==1){
				int l=i;
				while(l<N&&Num[l]==1){
					l++;
				}
				l--;
				for(int k=l+N;k<l+N+3&&k<2*N;k++){
					if(Num[k]==1){
						int j=k;
						while(j<2*N&&Num[j]==1){
							j++;
						}
						G[i][j-1]=true;
					}
					else if(Num[k]==2){
						int j=k;
						while(j>=N+1&&Num[j]==2){
							j--;
						}
						G[i][j]=true;
					}
					else{
						G[i][k]=true;
					}
				}
			}
			else{
				int l=i;
				while(l>=1&&Num[l]==2)l--;
				for(int k=l+N;k<l+N+3&&k<2*N;k++){
					if(Num[k]==1){
						int j=k;
						while(j<2*N&&Num[j]==1){
							j++;
						}
						G[i][j-1]=true;
					}
					else if(Num[k]==2){
						int j=k;
						while(j>=N+1&&Num[j]==2){
							j--;
						}
						G[i][j]=true;
					}
					else{
						G[i][k]=true;
					}
				}
			}
		}
		for(int i=N;i<2*N;i++){
			if(Num[i]==0){
				for(int k=i-N;k<i-N+3&&k<N;k++){
					if(Num[k]==1){
						int j=k;
						while(j<N&&Num[j]==1){
							j++;
						}
						G[i][j-1]=true;
					}
					else if(Num[k]==2){
						int j=k;
						while(j>=1&&Num[j]==2){
							j--;
						}
						G[i][j]=true;
					}
					else{
						G[i][k]=true;
					}
				}
			}
			else if(Num[i]==1){
				int l=i;
				while(l<2*N&&Num[l]==1){
					l++;
				}
				l--;
				for(int k=l-N;k<l-N+3&&k<N;k++){
					if(Num[k]==1){
						int j=k;
						while(j<N&&Num[j]==1){
							j++;
						}
						G[i][j-1]=true;
					}
					else if(Num[k]==2){
						int j=k;
						while(j>=1&&Num[j]==2){
							j--;
						}
						G[i][j]=true;
					}
					else{
						G[i][k]=true;
					}
				}
			}
			else{
				int l=i;
				while(l>=N+1&&Num[l]==2)l--;
				for(int k=l-N;k<l-N+3&&k<N;k++){
					if(Num[k]==1){
						int j=k;
						while(j<N&&Num[j]==1){
							j++;
						}
						G[i][j-1]=true;
					}
					else if(Num[k]==2){
						int j=k;
						while(j>=1&&Num[j]==2){
							j--;
						}
						G[i][j]=true;
					}
					else{
						G[i][k]=true;
					}
				}
			}
		}
		int SS[200];
		for(int i=0;i<200;i++)SS[i]=1000;
		SS[0]=0;SS[N]=0;
		if(Num[0]==1){
			int I=0;
			while(Num[I]==1&&I<N){
				SS[I]=0;
				I++;
			}
			SS[I]=1000;
		}
		if(Num[N]==1){
			int I=N;
			while(Num[I]==1&&I<2*N){
				SS[I]=0;
				I++;
			}
			
			SS[I]=1000;
		}
		for(int k=0;k<2*N;k++){
			for(int i=0;i<2*N;i++){
				for(int j=0;j<2*N;j++){
					if(G[j][i]){
						SS[i]=min(SS[i],SS[j]+1);
					}
				}
			}
		}
		
		int ans=min(SS[N-1],SS[2*N-1]);
		if(ans==1000)printf("NA\n");
		else printf("%d\n",ans);
	}
	return 0;
}