#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
struct p{
	int men[2][4];
	int cnt;
};
bool used[8][8][8][8][8][8][8][8]={};
int main(){
	int d[4][2]={{0,-1},{1,0},{0,1},{-1,0}};
	int ans[2][4],i,j,c=0;
	for(i=0;i<2;i++){
		for(j=0;j<4;j++){
			ans[i][j]=c;
			c++;
		}
	}
	p f,v;
	queue<p> q;
	while(scanf("%d %d %d %d %d %d %d %d",&f.men[0][0],&f.men[0][1],&f.men[0][2],&f.men[0][3],&f.men[1][0],&f.men[1][1],&f.men[1][2],&f.men[1][3])){
		memset(used,0,sizeof(used));
		while(!q.empty()){
			q.pop();
		}
		f.cnt=0;
		q.push(f);
		while(1){
			f=q.front();
			q.pop();
			if(used[f.men[0][0]][f.men[0][1]][f.men[0][2]][f.men[0][3]][f.men[1][0]][f.men[1][1]][f.men[1][2]][f.men[1][3]]==true){
				continue;
			}
			else{
				used[f.men[0][0]][f.men[0][1]][f.men[0][2]][f.men[0][3]][f.men[1][0]][f.men[1][1]][f.men[1][2]][f.men[1][3]]=true;
			}
			bool o=false;
			for(i=0;i<2;i++){
				for(j=0;j<4;j++){
					if(f.men[i][j]!=ans[i][j]){
						o=true;
					}
				}
			}
			if(o==false){
				break;
			}
		int x,y;
			for(i=0;i<2;i++){
				for(j=0;j<4;j++){
					if(f.men[i][j]==0){
						x=j;
						y=i;
					}
				}
			}
			int temp;
			for(i=0;i<4;i++){
				if((x+d[i][0])>=0&&(x+d[i][0])<=3&&(y+d[i][1])>=0&&(y+d[i][1])<=1){
					v=f;
					temp=v.men[y+d[i][1]][x+d[i][0]];
					v.men[y+d[i][1]][x+d[i][0]]=v.men[y][x];
					v.men[y][x]=temp;
					v.cnt++;
					q.push(v);
				}
			}
		}
		printf("%d\n",f.cnt);
	}
	return 0;
}