#include <vector>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <deque>
#include <algorithm>
#include <utility>
#include <functional>
#include <sstream>
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <ctime>
#include <climits>

using namespace std;

inline int toInt(string s) { int v; istringstream sin(s); sin >> v; return v;}
template<class T> inline string toString(T x) { ostringstream sout; sout << x; return sout.str();}

typedef vector<int> vi;
typedef vector<vi>  vvi;
typedef vector<string> vs;
typedef pair<int, int> pii;
typedef long long ll;

#define ALL(a) (a).begin(),(a).end()
#define RALL(a) (a).rbegin(),(a).rend()
#define EACH(t,i,c) for(t::iretator i=(c).begin(); i!=(c).end(); ++i)
#define EXIST(s,e) ((s).find(e)!=(s).end())
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
#define REP(i,n) FOR(i,0,n-1)

const double EPS = 1e-10;
const double PI = acos(-1.0);

typedef pair<string, pii> psp;

int d[] = {-4, 1, 4, -1};

map<string, int> table;

void bfs() {
	queue<psp> Q;
	Q.push(psp("01234567", pii(0, 0)));

	string str, str2;
	int cost, zpos, nzpos;
	while(!Q.empty()) {
		psp p = Q.front();
		Q.pop();
		str = p.first;
		cost = p.second.first + 1;
		zpos = p.second.second;
		table[str] = cost;

		REP(i, 4) {
			nzpos = zpos + d[i];
			if(0 <= nzpos && nzpos <= 7) {
				str2 = str;
				swap(str2[zpos], str2[nzpos]);
				if(!table[str2]) {
					Q.push(psp(str2, pii(cost, nzpos)));
				}
			}
		}
	}
}

int main() {
	bfs();

	string s;
	while(getline(cin, s)) {
		string str;
		REP(i, s.size()) {
			if(s[i] != ' ') {
				str += s[i];
			}
		}

		cout << table[str]-1 << endl;
	}

	return 0;
}