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

const int vec[] = {1, -1, 4, -4};

map<string, int> visited;
typedef pair<string, int> node;
// 何度も探索したら間に合わないので，完成形から逆にたどって全ての手数を列挙する
int solve() {
	queue<node> que;
	que.push(node("01234567", 0));
	visited["01234567"] = 0;
	while (!que.empty()) {
		node current = que.front();
		que.pop();
		int zero = current.first.find("0");
		for (int i = 0; i < 4; i++) {
			int next_z = zero + vec[i];
			if(0 <= next_z && next_z <= 7
					&& !((zero == 3 && next_z == 4)	// 3で右は無理
						|| (zero == 4 && next_z == 3))) // 4で左は無理
			{
				string next = current.first;
				swap(next[zero], next[next_z]);
				if(visited.find(next) == visited.end()) {
					visited[next] = current.second + 1;
					que.push(node(next, current.second + 1));
				}
			}
		}
	}
	return -1;
}

int main () {
	solve();
	while (true) {
		string str;
		getline(cin, str);
		if (cin.eof()) break;
		string::iterator end_it = remove(str.begin(), str.end(), ' ');
		str.erase(end_it, str.end());
		// 列挙したのを返すだけ
		cout << visited[str] << endl;
	}
	return 0;
}