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

class SP{
public:
  int p[8];
};

int mk(SP sp){
  int k=0;
  for(int i=0;i<8;i++){
    k=k*8+sp.p[i];
  }
  return k;
}

int main(){
  while(1){
    SP sp;
    cin>>sp.p[0];
    if(cin.eof())
      break;
    for(int i=1;i<8;i++){
      cin>>sp.p[i];
    }
    queue<SP>que;
    que.push(sp);
    map<int,int> n;
    n[mk(sp)]=0;
    while(!que.empty()){
      sp=que.front();
      que.pop();
      if(sp.p[0]==0&&sp.p[1]==1&&sp.p[2]==2&&sp.p[3]==3&&sp.p[4]==4&&sp.p[5]==5&&sp.p[6]==6&&sp.p[6]==6&&sp.p[7]==7){
        cout<<n[mk(sp)]<<endl;
        break;
      }
      int i0;
      for(int i=0;i<8;i++){
        if(sp.p[i]==0){
          i0=i;
          break;
        }
      }
      if(!(0<i0&&i0<=3)){
        SP sp2 = sp;
        swap(sp2.p[i0],sp2.p[i0-4]);
        if(n.find(mk(sp2))==n.end()){
          que.push(sp2);
          n[mk(sp2)]=n[mk(sp)]+1;
        }
      }
      if(!(4<=i0&&i0<=7)){
        SP sp2=sp;
        swap(sp2.p[i0],sp2.p[i0+4]);
        if(n.find(mk(sp2))==n.end()){
          que.push(sp2);
          n[mk(sp2)]=n[mk(sp)]+1;
        }
      }
      if(!(i0==0||i0==4)){
        SP sp2=sp;
        swap(sp2.p[i0],sp2.p[i0-1]);
        if(n.find(mk(sp2))==n.end()){
          que.push(sp2);
          n[mk(sp2)]=n[mk(sp)]+1;
        }
      }
      if(!(i0==3||i0==7)){
        SP sp2=sp;
        swap(sp2.p[i0],sp2.p[i0+1]);
        if(n.find(mk(sp2))==n.end()){
          que.push(sp2);
          n[mk(sp2)]=n[mk(sp)]+1;
        }
      }
    }
  }
  return 0;
}

