#include<iostream>
#include<vector>
#include<set>
#include<queue>
using namespace std;

int main()
{
  vector<int> ans;
  for(int i=0;i<12;i++)
    ans.push_back(i);
  ans.push_back(0);
  int n;
  for(;cin>>n,n!=-1;)
    {
      vector<int> p;
      p.push_back(n);
      for(int i=0;i<12;i++)
	{
	  int tmp;
	  cin>>tmp;
	  p.push_back(tmp);
	}
      set<vector<int> >hash;
      queue<pair<vector<int>,int> >qu;
      qu.push(make_pair(p,0));
      int anscnt=-1;
      int dx[]={0,1,1,2,2,3,4,5,5,6,6 ,7,7 ,9 ,10,10};
      int dy[]={2,2,5,3,6,7,5,6,9,7,10,8,11,10,11,12};
      set< vector<int> >t1;
      while(!qu.empty())
	{
	  vector<int > data=qu.front().first;
	  int cnt=qu.front().second;
	  qu.pop();
	  // cout<<"qu: "<<cnt<<endl;
	  if(data==ans)
	    {
	      anscnt=cnt;
	      break;
	    }
	  if(hash.find(data)!=hash.end())
	    continue;
	  hash.insert(data);
	  if(cnt>=10)
	    {
	      t1.insert(data);
	      continue;
	    }
	  for(int i=0;i<16;i++)
	    {
	      int x=dx[i];
	      int y=dy[i];
	      if(data[x]==0 || data[y]==0)
		{
		  swap(data[x],data[y]);
		  if(hash.find(data)==hash.end())
		    qu.push(make_pair(data,cnt+1));
		  swap(data[x],data[y]);
		}
	    }
	}
      if(anscnt==-1)
	{
	  set<vector<int> >hash;
	  queue<pair<vector<int>,int> >qu;
	  qu.push(make_pair(ans,0));
	  while(!qu.empty())
	    {
	      vector<int > data=qu.front().first;
	      int cnt=qu.front().second;
	      qu.pop();
	      // cout<<"qu: "<<cnt<<endl;
	      if(t1.find(data)!=t1.end())
		{
		  anscnt=10+cnt;
		  break;
		}
	      if(hash.find(data)!=hash.end())
		continue;
	      hash.insert(data);
	      if(cnt>=10)
		continue;
	      for(int i=0;i<16;i++)
		{
		  int x=dx[i];
		  int y=dy[i];
		  if(data[x]==0 || data[y]==0)
		    {
		      swap(data[x],data[y]);
		      if(hash.find(data)==hash.end())
			qu.push(make_pair(data,cnt+1));
		      swap(data[x],data[y]);
		    }
		}
	    }
	}

      if(anscnt==-1)
	cout<<"NA"<<endl;
      else
	cout<<anscnt<<endl;
    }
}