#include <cstdio>
#include <algorithm>
#include <queue>
#include <string>
#include <cstring>
#include <stack>
#include <vector>
#include <set>
#include <cmath>
#include <map> 
#include <iostream>
#include <cctype>
#include <utility> // 包含pair 
using namespace std;
typedef long long LL;
#define rep(i, j, k) for (int i = (int) (j); i <= (int)(k); i++)
map<string, int> solve;
const int mov[] = {1, -1, 4, -4}; // 在一行中模拟两行的上下移动效果 
// 但要注意这种一维的越界判断还要注意在换行的时候，如0123 4567这里的3和4并非adjacent，需要特判 

void bfs() {
	queue<string> que;
	que.push("01234567");
	solve["01234567"] = 0;
	while (!que.empty()) {
		string u = que.front(); que.pop();
		int p = 0; // 之后查找'0'在字符串中的位置
		for (int i = 0; i < 8; i++) {
			if (u[i] == '0') {
				p = i;
				break;
			}
		} 
		// 开始递推 
		for (int i = 0; i < 4; i++) {
			int loc = p + mov[i];
			if (loc >= 0 && loc < 8 && !(p == 3 && i == 0) && !(p == 4 && i == 1)) {
				string Next = u;
				swap(Next[loc], Next[p]); // 交换0与它相邻位置的数字（如果位置合法）
				if (solve.find(Next) == solve.end()) { // 如果交换后还未被递推过 
					solve[Next] = solve[u] + 1;
					que.push(Next);
				} 
			}
		}
	}
}

int main() {
	ios::sync_with_stdio(false);
	bfs();
	string line;
	while (getline(cin, line)) {
		line.erase(remove(line.begin(), line.end(), ' '), line.end()); // 删除字符串一行中的所有空格字符 
		cout << solve[line] << endl;
	}
    return 0;
}
