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

//cnnt INF =10000000;

class Point{
	public:
 int x;
 int y;
}; 

class FC{
	public:
 int B[6][4];//?????????
 int zx,zy;
 int n;//?????°

//???????????¶
 bool is_over(){	
	return  B[1][1]==0&&B[2][1]==1&&B[3][1]==2&&B[4][1]==3
		&&B[1][2]==4&&B[2][2]==5&&B[3][2]==6&&B[4][2]==7 ;
 }//?????¶???????????§
//??\?????????
void rot1(int x,int y){
	if(B[x+1][y]<8){
		swap(B[x][y],B[x+1][y]);
		zx++;
	}
 }
void rot2(int x,int y){
	if(B[x-1][y]<8){
		swap(B[x][y],B[x-1][y]);
		zx--;
	}
 }
void rot3(int x,int y){
	if(B[x][y+1]<8){
		swap(B[x][y],B[x][y+1]);
		zy++;
	}
 }
void rot4(int x,int y){
	if(B[x][y-1]<8){
		swap(B[x][y],B[x][y-1]);
		zy--;
	}
 }
};

int main(){
 FC A;//FC????????????B?????????
//?????????????????¨??¨??????8????????????
 for(int i=0;i<6;i++){
	for(int j=0;i<4;i++){
		A.B[i][j]=8;
	}
 }

//??°????????\???
 for(int i=1;i<3;i++){
	for(int j=1;j<5;j++){
		cin>>A.B[j][i];
		if(A.B[j][i]==0){
			A.zx=j;
			A.zy=i;
		}
	}
 }

 A.n=0;
//????????????????????\????????????
		queue<FC>que;
		que.push(A);

		while(!que.empty()){
			A=que.front();
			que.pop();

			if(A.is_over()){
				cout <<A.n<<endl;
				break;
			}

			FC nex1=A;nex1.rot1(nex1.zx,nex1.zy);nex1.n++;que.push(nex1);
			FC nex2=A;nex2.rot2(nex2.zx,nex2.zy);nex2.n++;que.push(nex2);
			FC nex3=A;nex3.rot3(nex3.zy,nex3.zy);nex3.n++;que.push(nex3);
			FC nex4=A;nex4.rot4(nex4.zy,nex4.zy);nex4.n++;que.push(nex4);
			//cout<<nex1.n<<nex2.n<<nex3.n<<nex4.n<<A.n<<endl;
		}
return 0;
}