#include <iostream>
#include <queue>
#include <map>
#include <vector>
#include <cmath>
#include <algorithm>
#include <sstream>
using namespace std;
typedef pair<int, int> P;

int iti;
int n[8];

int basyo(int x[]){
	int y = 0;
	int keta = 7;
	for(int i = 0; i < 8; i++){
		y = y + pow(10, keta)*x[i];
		keta--;
	}
	return y;
}

void solve(){
	queue<P> que;
	map<int, int> m;
	map<int, int>::iterator ite;
	que.push(P(basyo(n), 0));
	m.insert(make_pair(basyo(n), 0));
	while(true){
		P p = que.front(); que.pop();
		for(int i = 0; i < 8; i++){
			if((p.first/(int)pow(10,i))%10 == 0){
				iti = 7-i;
				break;
			}
		}
		if(p.first == 1234567){
			cout << p.second << endl;
			break;
		}
		int kari[8];
		for(int i = 0; i < 8; i++){
			kari[i] = (p.first%(int)pow(10, 8-i))/((int)pow(10, 7-i));
		}
		if(iti != 3 && iti != 7){
			swap(kari[iti], kari[iti+1]);
			ite = m.find(basyo(kari));
			if(ite == m.end()){
				que.push(P(basyo(kari), p.second+1));
				m.insert(make_pair(basyo(kari), p.second+1));
			}
			swap(kari[iti], kari[iti+1]);
		}
		if(iti != 0 && iti != 4){
			swap(kari[iti], kari[iti-1]);
			ite = m.find(basyo(kari));
			if(ite == m.end()){
				que.push(P(basyo(kari), p.second+1));
				m.insert(make_pair(basyo(kari), p.second+1));
			}
			swap(kari[iti], kari[iti-1]);
		}
		if(iti <= 3){
			swap(kari[iti+4], kari[iti]);
			ite = m.find(basyo(kari));
			if(ite == m.end()){
				que.push(P(basyo(kari), p.second+1));
				m.insert(make_pair(basyo(kari), p.second+1));
			}
			swap(kari[iti+4], kari[iti]);
		}
		else{
			swap(kari[iti-4], kari[iti]);
			ite = m.find(basyo(kari));
			if(ite == m.end()){
				que.push(P(basyo(kari), p.second+1));
				m.insert(make_pair(basyo(kari), p.second+1));
			}
			swap(kari[iti-4], kari[iti]);
		}
	}
}

int main(){
	while(cin >> n[0]){
		for(int i = 1; i < 8; i++){ 
			cin >> n[i];
		}
		solve();
	}
}