#include <set>
#include <map>
#include <list>
#include <queue>
#include <stack>
#include <cmath>
#include <ctype.h>
#include <ctime>
#include <cstdio>
#include <vector>
#include <string>
#include <bitset>
#include <cctype>
#include <cstdlib>
#include <cstring>
#include <utility>
#include <numeric>
#include <complex>
#include <sstream>
#include <fstream>
#include <iomanip>
#include <cassert>
#include <iostream>
#include <iterator>
#include <algorithm>

using namespace std;

//4方向ベクトル→↑←↓
int dx[] ={1,0,-1,0};
int dy[] ={0,-1,0,1};

//参考http://d.hatena.ne.jp/otaks/20111026/1319629788 

int main()
{
  map<string,int> dp;
  string str ="01234567";
  dp[str] = 0;
  queue<string> bfs;
  bfs.push(str);
  while(!bfs.empty()){
    str = bfs.front();
    bfs.pop();
    int t;
    for(int i = 0;i <8;i++){//0の位置を探す
      if(str[i] =='0')
	t = i;
    }

    if(t > 0&&t !=4){//左と交換
      string tm = str;
      swap(tm[t],tm[t-1]);
      if(dp.find(tm) ==dp.end()){//一致するものがないので追加する
	bfs.push(tm);
	dp[tm] =dp[str]+1;
      }
    }
    if(t>3){//上と入れ替え
      string tm = str;
      swap(tm[t],tm[t-4]);
      if(dp.find(tm) ==dp.end()){
	bfs.push(tm);
	dp[tm] =dp[str] + 1;
      }
    }
    if(t<7&&t !=3){//右と入れ替え
      string tm = str;
      swap(tm[t],tm[t+1]);
      if(dp.find(tm)==dp.end()){
	bfs.push(tm);
	dp[tm] = dp[str]+1;
      }
    }
    if(t <4){
      string tm =str;
      swap(tm[t],tm[t+4]);
      if(dp.find(tm) ==dp.end()){
	bfs.push(tm);
	dp[tm] = dp[str]+1;
      }
    }
  }
  while(1){
  string pz;
  char c;
  for(int i = 0; i < 8;i++){
    if(!(cin >>c))
      return 0;
    pz +=c;
  }
  cout <<dp[pz]<<endl;
  }
  return 0;
}