#include<stdio.h>
#include<utility>
#include<string.h>
#include<queue>
using namespace std;
int d[1<<27]={0};
int main()
{
	typedef struct p{int n;char s[9];}p;
	queue<p> Q;
	int m[4]={1,4,-4,-1};
	char s[9]={48,49,50,51,52,53,54,55,0},c[18];
	memset(d,1,sizeof(d));
	d[1234567]=0;
	p T;
	T.n=-1;
	strcpy(T.s,s);
	Q.push(T);

	while(!Q.empty())
	{
		T=Q.front();
		Q.pop();
		int i,j,k;
		char w[9];
		strcpy(w,T.s);
		if(T.n<30)
		{
			for(i=0;i<8;i++)
				if(T.s[i]=='0')
					break;
			if(i==3)
				j=1,k=4;
			else if(i==4)
				j=0,k=3;
			else
				j=0,k=4;
			for(;j<k;j++)
				if(i+m[j]>=0&&i+m[j]<8)
				{
					char t=T.s[i+m[j]];
					T.s[i+m[j]]=T.s[i];
					T.s[i]=t;
					if(d[atoi(T.s)]>d[atoi(w)]+1)
					{
						d[atoi(T.s)]=T.n=d[atoi(w)]+1;
						Q.push(T);
					}
					strcpy(T.s,w);
				}
		}
	}
	while((c[0]=getchar())!=-1)
	{
		for(int i=1;i<16;i++)
			c[i]=getchar();
		for(int i=0,j=0;i<8;i++,j+=2)
			s[i]=c[j];
		printf("%d\n",d[atoi(s)]);
	}
}