#include<cstdio>
#include<algorithm>
#include<iostream>
#include<queue>
#include<functional>
#include<map>
#include<vector>
using namespace std;
class P{
    public:
    int state[13];
    int cnt;
    int p1;
    int p2;
    P(){}
    P(int a[13],int cnt,int p1,int p2):cnt(cnt),p1(p1),p2(p2){
        for(int i = 0; i < 13; i++){
            state[i] = a[i];
        }
    }
};
int rules[13][6]={
    {1,2},{2,2,5},{4,0,1,3,6},{2,2,7},{1,5},
    {4,1,4,6,9},{4,2,5,7,10},{4,3,6,8,11},{1,7},{2,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 < 13; i++){
        tmp += (a[i]+48);
    }
    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,1,0,12));
    while( true ){
        if(Q.size() == 0)break;
        P p = Q.front();Q.pop();
        if(p.cnt > 21)break;
        string index = getIndex(p.state);
        if( memo[index] )continue;
        memo[index] = p.cnt;
        for(int j = 0; j < rules[p.p1][0]; j++){
            if(p.state[rules[p.p1][j+1]] == 0)continue;
            swap(p.state[p.p1],p.state[rules[p.p1][j+1]]);
            Q.push(P(p.state,p.cnt+1,p.state[p.p1],p.p2));
            swap(p.state[p.p1],p.state[rules[p.p1][j+1]]);
        }
        for(int j = 0; j < rules[p.p2][0]; j++){
            if(p.state[rules[p.p2][j+1]] == 0)continue;
            swap(p.state[p.p2],p.state[rules[p.p2][j+1]]);
            Q.push(P(p.state,p.cnt+1,p.p1,p.state[p.p2]));
            swap(p.state[p.p2],p.state[rules[p.p2][j+1]]);
        }
    }
    return ;
}
int main(){
    bfs();
    int input[13];
    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]-1);
        else puts("NA");
    }
    return 0;
}