#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
const int maxn=4e6;
const int dx[]={1,0,-1,0};
const int dy[]={0,1,0,-1};
int d[maxn];
struct state{
	int a[2][4];
};
state start;
const state end={0,1,2,3,4,5,6,7};
queue<state> q;
int a[10];
void init(){
	memset(d,-1,sizeof d);
	a[0]=1;
	for(int i=1;i<=8;i++){
		a[i]=a[i-1]*i;
	}
}
int toint(const state s){
	int acc=0;
	for(int i=0;i<8;i++){
		acc+=s.a[i/4][i%4] * a[8-i];
	}
	return acc;
}
/*
bool eq(state& s){
	for(int i=0;i<8;i++){
		if(s.a[i/4][i%4]!=end.a[i/4][i%4])
			return false;
	}
	return true;
}
*/
void bfs(){
	q.push(start);
	while(!q.empty()){
		state s=q.front();q.pop();
		int zx,zy;
		for(int i=0;i<8;i++){
			if(!s.a[i/4][i%4]){
				zx=i/4;
				zy=i%4;
				break;
			}
		}
		for(int dr=0;dr<4;dr++){
			int x=zx+dx[dr];
			int y=zy+dy[dr];
			if(x>=0 && y>=0 && x<2 && y<4){
				state s0=s;
				swap(s0.a[zx][zy],s0.a[x][y]);
				if(d[toint(s0)]==-1){
					q.push(s0);
					d[toint(s0)]=d[toint(s)]+1;
				}
			}
		}
	}
}
int main(){
	init();
	for(int i=0;i<8;i++){
		start.a[i/4][i%4]=i;
	}
	d[toint(start)]=0;
	//以下打表 
	bfs();
	while(cin>>start.a[0][0]){
		
		for(int i=1;i<8;i++){
			cin>>start.a[i/4][i%4];
		}
		cout<<d[toint(start)]<<endl;
	}
	return 0;
}