#pragma GCC optimize(2)
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int INF=0x3f3f3f3f;
const int dx[]={0,0,1,-1};
const int dy[]={1,-1,0,0};
int num[2][4],d[1<<24];
int encode()
{
	int t=0;
	for(int i=0;i<2;++i)
		for(int j=0;j<4;++j)
			t=t*8+num[i][j];
	return t;
}
void decode(int t)
{
	for(int i=1;i>=0;--i)
		for (int j=3;j>=0;--j)
			num[i][j]=t%8,t/=8;
}
queue<int> q;
int bfs()
{
    memset(d,0x3f,sizeof(d));
    while(!q.empty())q.pop();
    int x=encode();
    q.push(x),d[x]=0;
    while(!q.empty())
    {
        int p=q.front();q.pop();
        decode(p);
        if(p==01234567) return d[p];
        for(int i=0;i<2;++i)
            for(int j=0;j<4;++j)
                if(!num[i][j]) 
                    for(int k=0;k<4;++k)
                    {
                        int x=i+dx[k],y=j+dy[k];
                        if(0<=x&&x<2&&0<=y&&y<4)
                        {
                            swap(num[i][j],num[x][y]);
                            int w=encode();
                            if(d[w]==INF) d[w]=d[p]+1,q.push(w);
                            swap(num[i][j],num[x][y]);
                        }
                    }
    }
}
int main()
{
    while(scanf("%d",&num[0][0])!=EOF)
    {
        for(int i=0;i<2;++i)
            for(int j=0;j<4;++j)
                if(i==0&&j==0) continue;
                else scanf("%d",&num[i][j]);
        printf("%d\n",bfs());
    }
}
