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

bool che[8][8][8][8][8][8][8];

class puzzle{
public:
	int p[8];
	int cnt;
	puzzle &operator=(const puzzle &o){
		for (int i = 0; i < 8; i++){
			p[i] = o.p[i];
		}
		cnt = o.cnt;
		return *this;
	}
};

bool isOK(int p[]){
	if (p[0] == 0 && p[1] == 1 && p[2] == 2 && p[3] == 3 && p[4] == 4 && p[5] == 5 && p[6] == 6 && p[7] == 7){
		return true;
	}
	return false;
}

void init_che(puzzle P){
	for (int a = 0; a < 8; a++){
		for (int b = 0; b < 8; b++){
			for (int c = 0; c < 8; c++){
				for (int d = 0; d < 8; d++){
					for (int e = 0; e < 8; e++){
						for (int f = 0; f < 8; f++){
							for (int g = 0; g < 8; g++){
								che[a][b][c][d][e][f][g] = false;
							}
						}
					}
				}
			}
		}
	}
	che[P.p[0]][P.p[1]][P.p[2]][P.p[3]][P.p[4]][P.p[5]][P.p[6]] = true;
}

bool isCheck(puzzle P){
	if (che[P.p[0]][P.p[1]][P.p[2]][P.p[3]][P.p[4]][P.p[5]][P.p[6]])
		return false;
	che[P.p[0]][P.p[1]][P.p[2]][P.p[3]][P.p[4]][P.p[5]][P.p[6]] = true;
	return true;
}

bool ch_u(puzzle& P,int o){
	if (o / 4 == 1){
		return false;
	}
	swap(P.p[o], P.p[o + 4]);
	return true;
}

bool ch_d(puzzle& P, int o){
	if (o / 4 == 0){
		return false;
	}
	swap(P.p[o], P.p[o - 4]);
	return true;
}

bool ch_r(puzzle& P, int o){
	if (o % 4 == 3){
		return false;
	}
	swap(P.p[o], P.p[o + 1]);
	return true;
}

bool ch_l(puzzle& P, int o){
	if (o % 4 == 0){
		return false;
	}
	swap(P.p[o], P.p[o - 1]);
	return true;
}

int main(){
	puzzle P;
	int o;
	while (cin >> P.p[0]){
		if (cin.eof()){
			break;
		}
		for (int i = 1; i < 8; i++){
			cin >> P.p[i];
		}
		P.cnt = 0;
		init_che(P);

		queue<puzzle> que;
		que.push(P);

		if (isOK(P.p)){
			cout << P.cnt << endl;
			continue;
		}

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

			for (int i = 0; i < 8; i++){
				if (P.p[i] == 0){
					o = i;
					break;
				}
			}

			P.cnt += 1;
			if (ch_u(P, o)){
				if (isOK(P.p)){
					cout << P.cnt << endl;
					break;
				}
				if (isCheck(P))
					que.push(P);
				swap(P.p[o], P.p[o + 4]);
			}
			if (ch_d(P, o)){
				if (isOK(P.p)){
					cout << P.cnt << endl;
					break;
				}
				if (isCheck(P))
					que.push(P);
				swap(P.p[o], P.p[o - 4]);
			}
			if (ch_r(P, o)){
				if (isOK(P.p)){
					cout << P.cnt << endl;
					break;
				}
				if (isCheck(P))
					que.push(P);
				swap(P.p[o], P.p[o + 1]);
			}
			if (ch_l(P, o) && isCheck(P)){
				if (isOK(P.p)){
					cout << P.cnt << endl;
					break;
				}
				que.push(P);
			}
		}
	}
	return 0;
}
