#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
int vis[17000000];
int temp[10];
int s;
int dir[4]={-1,1,4,-4};
struct Node
{
    int x;
	int line;
    int step;
    friend bool operator <(Node a, Node b)
    {
        return a.step>b.step;
    }
};
void BFS(int x,int s)
{
    priority_queue<Node> Q;
    Node p,q;
    int k,t,i;
    p.x=x;
    p.step=0;
	p.line=s;
    Q.push(p);
    while(!Q.empty())
    {
		q=Q.top();
		Q.pop();
		if(q.line==342391)
		{
			printf("%d\n",q.step);
			return ;
		}
		
		for(k=0;k<4;k++)
		{
			p.x=q.x+dir[k];
			if(p.x>8||p.x<=0||(p.x==5&&(q.x==4||q.x==6)))
				continue;
			t=q.line;
			for(i=8;i>=1;i--)
			{
				temp[i]=t%8;
				t=t>>3;
			}
			p.line=0;
			for(i=1;i<=8;i++)
			{
				if(i==p.x)
				{
					p.line=(p.line<<3)+temp[q.x];
				}
				else if(i==q.x)
				{
					p.line=(p.line<<3)+temp[p.x];
				}
				else
				{
					p.line=(p.line<<3)+temp[i];
				}
			}
			if(vis[p.line])
				continue;
			vis[p.line]=1;
			p.step=q.step+1;
			Q.push(p);
		}
    }
    printf("-1\n");
}
int main()
{
	int k=0;
	int t;
    while(scanf("%d",&t)!=EOF)
	{
		k=(k<<3)+t;
		memset(vis,0,sizeof(vis));
		if(t==0)
			s=1;
		for(int i=2;i<=8;i++)
		{
			scanf("%d",&t);
			if(t==0)
				s=i;
			k=(k<<3)+t;
		}
		vis[k]=1;
		BFS(s,k);
		k=0;
	}
    return 0;
} 