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


class Puzzule {
public:
	int zero;//0?????????
	int Piece[8];
	int n;
	bool isover() {//????????£??????????????£????????????
		return (Piece[0] == 0) && (Piece[1] == 1) && (Piece[2] == 2) && (Piece[3] == 3) && (Piece[4] == 4) && (Piece[5] == 5) && (Piece[6] == 6) && (Piece[7] == 7);
	}
	void rot1() {//?????\?????????
		if (((zero ) >= 4) && ((zero ) <= 7))//???????????????
		{		swap(Piece[zero], Piece[zero - 4]);
		zero= zero - 4;
		}
		
	}

	void rot2() {//?????\?????????
		if (((zero) >= 0) && ((zero) <= 3))//???????????????
		{
			swap(Piece[zero], Piece[zero + 4]);
			
			zero = zero + 4;
		}
		
	}

	void rot3() {//	?????\?????????
		if (((zero + 1) >= 0) && ((zero + 1) <= 7) && (zero!=(7)) && (zero != (3))) {//???????????????
			swap(Piece[zero], Piece[zero + 1]);
			zero = zero +1;
		}
	
	}

	void rot4() {//	?????\?????????
		if (((zero - 1) >= 0) && ((zero - 1) <= 7) && (zero != (0)) && (zero != (4)))//???????????????
		{
			swap(Piece[zero], Piece[zero - 1]);
			
			zero = zero -1;
		}
	
	}




};




int main() {

//	int zero = 0;
	Puzzule p;
	
	for (int i = 0; i <= 7; i++) {
	
		cin >> p.Piece[i];
		if (p.Piece[i] == 0) {
			p.zero = i;//0????????????????¨????
		}
		
	}
	
	p.n = 0;//n??????????????°
	queue<Puzzule> que;

	que.push(p);


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

		if (p.isover()) {
			
					cout << p.n << endl;//??????????????\??????????????°??¨???
			break;
		}
		//p????????°???????????????????????????????????§???????????????????????????
		Puzzule nex1 = p;        nex1.rot1();        nex1.n++;        que.push(nex1);
		Puzzule nex2 = p;        nex2.rot2();        nex2.n++;        que.push(nex2);
		Puzzule nex3 = p;        nex3.rot3();        nex3.n++;        que.push(nex3);
		Puzzule nex4 = p;        nex4.rot4();        nex4.n++;        que.push(nex4);
		for (int i = 0;i < 8;i++) {
			cout << p.Piece[i] << " ";
		}
		cout << endl;

	}



	return 0;
}