#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;

class SP{
public:
    int p[2][4];
    int n;
    
    bool finish(){
    	p[0][0]==0 && p[0][1]==1 && p[0][2]==2 && p[0][3]==3&&
    	p[1][0]==4 && p[1][1]==5 && p[1][2]==6 && p[1][3]==7;
	}
	
	void move_right(int x,int y){
		if(x!=3)
			swap(p[y][x],p[y][x+1]);
	}	
	
	void move_left(int x,int y){
		if(x!=0)
			swap(p[y][x],p[y][x-1]);
	}	
	
	void move_up(int x,int y){
		if(y!=0)
			swap(p[y][x],p[y+1][x]);
	}	
	
	void move_down(int x,int y){
		if(y!=1)
			swap(p[y][x],p[y-1][x]);
	}		
};    
      
int main()
{
	SP sp;
	sp.n=0;
	
	int zx,zy;
	
	for(int y=0;y<2;y++){
		for(int x=0;x<4;x++){
			cin>>sp.p[y][x];
			if(sp.p[y][x]==0){
				zx=x;
				zy=y;
			}
		}
	}
	
	queue<SP> que;
	que.push(sp);
	
	while(!que.empty()){
		sp=que.front();
		que.pop();
		
		if(sp.finish()){
			cout<<sp.n<<endl;
			break;
		}
	
	SP sp1=sp; sp1.move_right(zx,zy); sp1.n++; que.push(sp1);	
	SP sp2=sp; sp2.move_left(zx,zy);  sp2.n++; que.push(sp2);
	SP sp3=sp; sp3.move_up(zx,zy);    sp3.n++; que.push(sp3);
	SP sp4=sp; sp4.move_down(zx,zy);  sp4.n++; que.push(sp4);
	}
    return 0;
}      	