#include<cstdio>
#include<algorithm>
#include<iostream>
#include<queue>
#include<functional>
#include<map>
#include<vector>
using namespace std;
class P{
	public:
	int state[15];
	int cnt;
	P(){}
	P(int a[15],int cnt):cnt(cnt){
		for(int i = 0; i < 15; i++){
			state[i] = a[i];
		}
	}
};
int rules[13][6]={
	{1,2},{2,2,5},{4,0,1,2,3,6},{2,2,7},{1,5},
	{4,1,4,6,9},{4,2,5,7,10},{4,3,6,8,11},{1,7},{3,5,10},
	{4,6,9,11,12},{2,7,10},{1,10},
};
map< string , int >memo;

string getIndex(int *a){
	string tmp="";
	for(int i = 0; i < 12; i++){
		tmp += a[i];
	}
	return tmp;
}

void bfs(){
	int F[] = {0,1,2,3,4,5,6,7,8,9,10,11,0};
	queue < P > Q;
	Q.push(P(F,0));
	while( true ){
		if(Q.size() == 0)break;
		P p = Q.front();Q.pop();
		if(p.cnt > 20)break;
		string index = getIndex(p.state);
		if(memo[index])continue;
		memo[index] = p.cnt;
		for(int i = 0; i < 13; i++){
			if(p.state[i] == 0){
				int zero = p.state[i];
				for(int j = 0; j < rules[zero][0]; j++){
					swap(p.state[i],p.state[rules[i][j+1]]);
					Q.push(P(p.state,p.cnt+1));
					swap(p.state[i],p.state[rules[i][j+1]]);
				}
			}
		}
	}
}
int main(){
	bfs();
	int input[15];
	while(true){
	    scanf("%d",&input[0]);
	    if(input[0] == -1)break;
		for(int i = 1; i < 13; i++){
			scanf("%d",&input[i]);
		}
		string index = getIndex(input);
		if(memo[index])printf("%d\n",memo[index]);
		else puts("NA");
	}
	return 0;
}