//2015/07/07	AOJ0121:SevenPuzzle	実験

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

int D[100000];

class SP{
public:
	int p[8];
	int n;

	int number(){		//配列を数字に。
		return p[0]*10000000+p[1]*1000000+p[2]*100000+p[3]*10000+p[4]*1000+p[5]*100+p[6]*10+p[7];
	}

	bool is_over(){
		return p[0]==0 && p[1]==1 && p[2]==2 && p[3]==3
			&& p[4]==4 && p[5]==5 && p[6]==6 && p[7]==7;
	}

	void rot1(){		
		swap(p[0],p[1]);
	}
	void rot2(){		
		swap(p[0],p[4]);
	}
	void rot3(){		
		swap(p[1],p[2]);
	}
	void rot4(){		
		swap(p[1],p[5]);
	}
	void rot5(){		
		swap(p[2],p[3]);
	}
	void rot6(){		
		swap(p[2],p[6]);
	}
	void rot7(){		
		swap(p[3],p[7]);
	}
	void rot8(){		
		swap(p[4],p[5]);
	}
	void rot9(){		
		swap(p[5],p[6]);
	}
	void rot10(){		
		swap(p[6],p[7]);
	}

};

int y=0;

int main(){
//	for(int i=0; i<1000; i++){
		SP now;
		for(int j=0;j<8;j++){
			cin >> now.p[j];
		}
		now.n=0;

				//配列Dに数字に直したものを入れ添字をずらす
		D[y]=now.number();
		y++;

		queue<SP> que;
		que.push(now);

		while(!que.empty()){
			now=que.front();
			que.pop();
			
			if(now.is_over()){
				cout << now.n << "\n";
				break;
			}


		if(now.p[0]==0){	
			SP nex1=now;	nex1.rot1();	nex1.n++;	
			int z=0;
			for(int i=0;i<y;i++){	//未訪問チェック
				if(D[i]==nex1.number()){
					z++;
				}
			}
			if(z==0){	//未訪問の場合
				que.push(nex1);
				D[y]=nex1.number();
				y++;
			}

			SP nex2=now;	nex2.rot2();	nex2.n++;	
			int a=0;
			for(int i=0;i<y;i++){	//未訪問チェック
				if(D[i]==nex2.number()){
					a++;
				}
			}
			if(a==0){	//未訪問の場合
				que.push(nex2);
				D[y]=nex2.number();
				y++;
			}
		}

		
		if(now.p[1]==0){	
			SP nex1=now;	nex1.rot1();	nex1.n++;	
			int z=0;
			for(int i=0;i<y;i++){	//未訪問チェック
				if(D[i]==nex1.number()){
					z++;
				}
			}
			if(z==0){	//未訪問の場合
				que.push(nex1);
				D[y]=nex1.number();
				y++;
			}

			SP nex3=now;	nex3.rot3();	nex3.n++;	
			int a=0;
			for(int i=0;i<y;i++){	//未訪問チェック
				if(D[i]==nex3.number()){
					a++;
				}
			}
			if(a==0){	//未訪問の場合
				que.push(nex3);
				D[y]=nex3.number();
				y++;
			}
		
			SP nex4=now;	nex4.rot4();	nex4.n++;	
			int b=0;
			for(int i=0;i<y;i++){	//未訪問チェック
				if(D[i]==nex4.number()){
					b++;
				}
			}
			if(b==0){	//未訪問の場合
				que.push(nex4);
				D[y]=nex4.number();
				y++;
			}
		}

		if(now.p[2]==0){	
			SP nex3=now;	nex3.rot3();	nex3.n++;	
			int a=0;
			for(int i=0;i<y;i++){	//未訪問チェック
				if(D[i]==nex3.number()){
					a++;
				}
			}
			if(a==0){	//未訪問の場合
				que.push(nex3);
				D[y]=nex3.number();
				y++;
			}
		
			SP nex5=now;	nex5.rot5();	nex5.n++;	
			int b=0;
			for(int i=0;i<y;i++){	//未訪問チェック
				if(D[i]==nex5.number()){
					b++;
				}
			}
			if(b==0){	//未訪問の場合
				que.push(nex5);
				D[y]=nex5.number();
				y++;
			}

			SP nex6=now;	nex6.rot6();	nex6.n++;	
			int c=0;
			for(int i=0;i<y;i++){	//未訪問チェック
				if(D[i]==nex6.number()){
					c++;
				}
			}
			if(c==0){	//未訪問の場合
				que.push(nex6);
				D[y]=nex6.number();
				y++;
			}
			
		}

		if(now.p[3]==0){
			SP nex5=now;	nex5.rot5();	nex5.n++;	
			int b=0;
			for(int i=0;i<y;i++){	//未訪問チェック
				if(D[i]==nex5.number()){
					b++;
				}
			}
			if(b==0){	//未訪問の場合
				que.push(nex5);
				D[y]=nex5.number();
				y++;
			}
	
			SP nex7=now;	nex7.rot7();	nex7.n++;	
			int c=0;
			for(int i=0;i<y;i++){	//未訪問チェック
				if(D[i]==nex7.number()){
					c++;
				}
			}
			if(c==0){	//未訪問の場合
				que.push(nex5);
				D[y]=nex5.number();
				y++;
			}
		}

		if(now.p[4]==0){
			SP nex2=now;	nex2.rot2();	nex2.n++;	
			int a=0;
			for(int i=0;i<y;i++){	//未訪問チェック
				if(D[i]==nex2.number()){
					a++;
				}
			}
			if(a==0){	//未訪問の場合
				que.push(nex2);
				D[y]=nex2.number();
				y++;
			}
	
			SP nex8=now;	nex8.rot8();	nex8.n++;	
			int c=0;
			for(int i=0;i<y;i++){	//未訪問チェック
				if(D[i]==nex8.number()){
					c++;
				}
			}
			if(c==0){	//未訪問の場合
				que.push(nex8);
				D[y]=nex8.number();
				y++;
			}
		}

		if(now.p[5]==0){
			SP nex8=now;	nex8.rot8();	nex8.n++;	
			int c=0;
			for(int i=0;i<y;i++){	//未訪問チェック
				if(D[i]==nex8.number()){
					c++;
				}
			}
			if(c==0){	//未訪問の場合
				que.push(nex8);
				D[y]=nex8.number();
				y++;
			}

			
			SP nex4=now;	nex4.rot4();	nex4.n++;	
			int b=0;
			for(int i=0;i<y;i++){	//未訪問チェック
				if(D[i]==nex4.number()){
					b++;
				}
			}
			if(b==0){	//未訪問の場合
				que.push(nex4);
				D[y]=nex4.number();
				y++;
			}
	
			SP nex9=now;	nex9.rot9();	nex9.n++;	
			int a=0;
			for(int i=0;i<y;i++){	//未訪問チェック
				if(D[i]==nex9.number()){
					a++;
				}
			}
			if(a==0){	//未訪問の場合
				que.push(nex9);
				D[y]=nex9.number();
				y++;
			}
		}
		
		if(now.p[6]==0){
			SP nex9=now;	nex9.rot9();	nex9.n++;	
			int c=0;
			for(int i=0;i<y;i++){	//未訪問チェック
				if(D[i]==nex9.number()){
					c++;
				}
			}
			if(c==0){	//未訪問の場合
				que.push(nex9);
				D[y]=nex9.number();
				y++;
			}

			SP nex6=now;	nex6.rot6();	nex6.n++;	
			int b=0;
			for(int i=0;i<y;i++){	//未訪問チェック
				if(D[i]==nex6.number()){
					b++;
				}
			}
			if(b==0){	//未訪問の場合
				que.push(nex6);
				D[y]=nex6.number();
				y++;
			}
			SP nex10=now;	nex10.rot10();	nex10.n++;	
			int a=0;
			for(int i=0;i<y;i++){	//未訪問チェック
				if(D[i]==nex10.number()){
					a++;
				}
			}
			if(a==0){	//未訪問の場合
				que.push(nex10);
				D[y]=nex10.number();
				y++;
			}
		}	

		if(now.p[7]==0){
			SP nex10=now;	nex10.rot10();	nex10.n++;	
			int a=0;
			for(int i=0;i<y;i++){	//未訪問チェック
				if(D[i]==nex10.number()){
					a++;
				}
			}
			if(a==0){	//未訪問の場合
				que.push(nex10);
				D[y]=nex10.number();
				y++;
			}
			SP nex7=now;	nex7.rot7();	nex7.n++;	
			int c=0;
			for(int i=0;i<y;i++){	//未訪問チェック
				if(D[i]==nex7.number()){
					c++;
				}
			}
			if(c==0){	//未訪問の場合
				que.push(nex7);
				D[y]=nex7.number();
				y++;
			}
		}
		}			

	//}

			
	
	return 0;
}