#include<stdio.h>
#include<map>
#include<queue>
typedef long long L;
typedef std::map<L,int>M;
M m;
L S(L l,int a,int b)
{
	L c=(l>>(a*4))&15;
	l&=~(15LL<<(a*4));
	L d=(l>>(b*4))&15;
	l&=~(15LL<<(b*4));
	return l|(c<<(b*4))|(d<<(a*4));
}

struct I{int operator()(L l,int x)
{
	if(m.find(l)!=m.end())return -2;
	m[l]=x;
	return -1;
}};
struct E
{
	M inm;
	int operator()(L l,int x)
	{
		M::iterator ite=m.find(l);
		if(ite!=m.end())return ite->second+x;
		else if(inm.find(l)!=inm.end())return -2;
		inm[l]=x;
		return -1;
	}
};
template<class T>
int F(L init,T func)
{
	const int di[13][4]={
		{3},
		{3,6},
		{1,2,4,7},
		{3,8},
		{6},
		{2,5,7,10},
		{3,6,8,11},
		{4,7,9,12},
		{8},
		{6,11},
		{7,10,12,13},
		{8,11},
		{11}};
	M::iterator ite;
	std::queue<L>q;
	q.push(init);
	q.push(-1);
	int i,j,k;
	for(int x=0;x<=10;)
	{
		L l=q.front();
		q.pop();
		if(l<0)
		{
			q.push(l);
			++x;
			continue;
		}
		int res=func(l,x);
		if(res==-2)
			continue;
		if(res>=0)
			return res;
		int a[2];
		for(i=j=0;i<13;++i)
			if( !(l&(15LL<<(i*4))) )
				a[j++]=i;
		for(k=0;k<2;++k)
			for(i=0;i<4;++i)
			{
				int c=di[a[k]][i];
				if(c)
				{
					L t=S(l,a[k],c-1);
					q.push(t);
				}
				else break;
			}
	}
	return -1;
}
int main()
{
	F(0xBA9876543210LL,I());
	for(;;)
	{
		L l=0,x;
		for(int i=0;i<13;++i)
		{
			if(scanf("%lld",&x),x<0)return 0;
			l|=(x<<(i*4));
		}
		x=F(l,E());
		x<0?puts("NA"):printf("%lld\n",x);
	}
}