#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <cstring>

using namespace std;
typedef pair<int, int> P;
typedef pair<P, int> PP;

void solve()
{
	int n;
	while(cin >> n, n)
	{
		vector< vector<int> > Buil(2, vector<int>(n + 2));
		for(int i = 0; i < 2; ++i)
		{
			for(int j = 0; j < n; ++j)
			{
				cin >> Buil[i][j];
			}
		}
		queue<PP> Que;
		Que.push(PP(P(0, 0), 0));
		Que.push(PP(P(1, 0), 0));
		bool used[2][101];
		memset(used, 0, sizeof(used));
		while(!Que.empty())
		{
			PP pp = Que.front();
			Que.pop();
			if(Buil[pp.first.first][pp.first.second] == 1)
			{
				while(pp.first.first < n && Buil[pp.first.first][pp.first.second] == 1)
				{
					++pp.first.second;
				}
				--pp.first.second;
			}
			else if(Buil[pp.first.first][pp.first.second] == 2)
			{
				while(Buil[pp.first.first][pp.first.second] == 2)
				{
					--pp.first.second;
				}
			}

			if(used[pp.first.first][pp.first.second])
			{
				continue;
			}
			used[pp.first.first][pp.first.second] = true;
			if(pp.first.second >= n - 1)
			{
				cout << pp.second << endl;
				goto END;
			}
			
			for(int i = 0; i < 3; ++i)
			{
				Que.push(PP(P(!pp.first.first, pp.first.second + i), pp.second + 1));
			}
		}
		cout << "NA" << endl;
END:
		;
	}
}

int main()
{
	solve();
	return(0);
}