#include<iostream>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
#define MAX_N 20
#define WIDTH 100
int OK[5][5] = { {0,0,1,0,0},{0,1,1,1,0},{1,1,1,1,1},{0,1,1,1,0},{0,0,1,0,0} };
int dx[4] = { 1,0,-1,0 }, dy[4] = { 0,1,0,-1 };
pair<int, vector<vector<int>>> dp[MAX_N + 2][WIDTH], E[WIDTH * 10];

int score(vector<vector<int>>p) {
	int sum = 0; pair<int, int>a[12], b[12]; int CNT = 0;
	for (int i = 0; i < 25; i++) {
		if (p[i / 5][i % 5] >= 1)a[p[i / 5][i % 5]] = make_pair(i / 5, i % 5);
	}
	for (int i = 5; i < 20; i++) {
		if (OK[i / 5][i % 5] == 1) { CNT++; b[CNT] = make_pair(i / 5, i % 5); }
	}
	for (int i = 1; i <= 11; i++) { sum += abs(a[i].first - b[i].first) + abs(a[i].second - b[i].second); }
	return sum;
}
vector<vector<int>> Move(vector<vector<int>>p, int x, int y,int dir) {
	swap(p[x + dx[dir]][y + dy[dir]], p[x][y]); return p;
}
int BeemSearch(vector<vector<int>>Z) {
	vector<vector<int>>GOAL; int CNT = 0;
	for (int i = 0; i < 5; i++) { vector<int>GOAL2(5, -1); GOAL.push_back(GOAL2); }
	for (int i = 5; i < 20; i++) {
		if (OK[i / 5][i % 5] == 1) { CNT++; GOAL[i / 5][i % 5] = CNT; }
	}
	GOAL[0][2] = 0; GOAL[4][2] = 0;
	if (Z == GOAL)return 0;
	dp[0][0] = make_pair(score(Z), Z);
	for (int i = 0; i < MAX_N; i++) {
		int CNTS = 0;
		for (int j = 0; j < WIDTH; j++) {
			if (dp[i][j].second.size() == 0)continue;
			vector<vector<int>>D = dp[i][j].second;
			for (int k = 0; k < 25; k++) {
				if (D[k / 5][k % 5] != 0)continue;
				for (int l = 0; l < 4; l++) {
					int cx = (k / 5) + dx[l], cy = (k % 5) + dy[l];
					if (cx < 0 || cx >= 5 || cy < 0 || cy >= 5)continue;
					if (D[cx][cy] <= 0)continue;
					vector<vector<int>>D2 = Move(D, k / 5, k % 5, l);
					E[CNTS] = make_pair(score(D2), D2); CNTS++;
				}
			}
		}
		sort(E, E + CNTS); dp[i + 1][0] = E[0]; int CNT2 = 1;
		if (E[0].first == 0)return i + 1;
		for (int i = 1; i < CNTS; i++) {
			if (E[i - 1] != E[i]) { dp[i + 1][CNT2] = E[i]; CNT2++; }
			if (CNT2 == WIDTH)break;
		}
	}
	return -1;
}
int main() {
	while (true) {
		for (int i = 0; i < MAX_N + 2; i++) {
			for (int j = 0; j < WIDTH; j++) {
				vector<vector<int>>ZERO; dp[i][j] = make_pair(0, ZERO);
			}
		}
		for (int i = 0; i < WIDTH * 10; i++) { vector<vector<int>>ZERO; E[i] = make_pair(0, ZERO); }
		vector<vector<int>>C;
		for (int i = 0; i < 5; i++) { vector<int>C2(5, -1); C.push_back(C2); }
		cin >> C[0][2]; if (C[0][2] == -1)break;
		for (int i = 1; i < 4; i++)cin >> C[1][i];
		for (int i = 0; i < 5; i++)cin >> C[2][i];
		for (int i = 1; i < 4; i++)cin >> C[3][i]; cin >> C[4][2];
		int ret = BeemSearch(C);
		if (ret == -1)cout << "NA" << endl; else cout << ret << endl;
	}
	return 0;
}