#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <stack>
#include <fstream>
#include <vector>
#include <map>
#include <set>
#include <cmath>
#include <algorithm>
#include <functional>
#define inf 0x3f3f3f3f
#define inff -30000000
using namespace std;
typedef long long ll;
const int MAXN=1e5+10;
const int MAX=1000+10;
int vis[8][8][8][8][8][8][8][8];
struct NODE{
    int flag;
    int s[10];
    int time;
}t,temp;
int a[10];
int bfs(){
    queue<NODE>q;
    vis[0][1][2][3][4][5][6][7]=-1;
    for(int i=0;i<8;i++){
        t.s[i]=i;
        if(a[i]==0) t.flag=i;
    }
    t.time=0;
    q.push(t);
    while(!q.empty()){
        t=q.front();q.pop();
        vis[t.s[0]][t.s[1]][t.s[2]][t.s[3]][t.s[4]][t.s[5]][t.s[6]][t.s[7]]=min(vis[t.s[0]][t.s[1]][t.s[2]][t.s[3]][t.s[4]][t.s[5]][t.s[6]][t.s[7]],t.time);
        if(t.flag-1>=0&&t.flag!=4){
            for(int i=0;i<8;i++)
                temp.s[i]=t.s[i];
            swap(temp.s[t.flag],temp.s[t.flag-1]);
            if(vis[temp.s[0]][temp.s[1]][temp.s[2]][temp.s[3]][temp.s[4]][temp.s[5]][temp.s[6]][temp.s[7]]==0){
                vis[temp.s[0]][temp.s[1]][temp.s[2]][temp.s[3]][temp.s[4]][temp.s[5]][temp.s[6]][temp.s[7]]=inf;
                temp.flag=t.flag-1;
                temp.time=t.time+1;
                q.push(temp);
            }
        }
        if(t.flag+1<8&&t.flag!=3){
            for(int i=0;i<8;i++)
                temp.s[i]=t.s[i];
            swap(temp.s[t.flag],temp.s[t.flag+1]);
            if(vis[temp.s[0]][temp.s[1]][temp.s[2]][temp.s[3]][temp.s[4]][temp.s[5]][temp.s[6]][temp.s[7]]==0){
                vis[temp.s[0]][temp.s[1]][temp.s[2]][temp.s[3]][temp.s[4]][temp.s[5]][temp.s[6]][temp.s[7]]=inf;
                temp.flag=t.flag+1;
                temp.time=t.time+1;
                q.push(temp);
            }
        }
        if(t.flag+4<8){
            for(int i=0;i<8;i++)
                temp.s[i]=t.s[i];
            swap(temp.s[t.flag],temp.s[t.flag+4]);
            if(vis[temp.s[0]][temp.s[1]][temp.s[2]][temp.s[3]][temp.s[4]][temp.s[5]][temp.s[6]][temp.s[7]]==0){
                vis[temp.s[0]][temp.s[1]][temp.s[2]][temp.s[3]][temp.s[4]][temp.s[5]][temp.s[6]][temp.s[7]]=inf;
                temp.flag=t.flag+4;
                temp.time=t.time+1;
                q.push(temp);
            }
        }
        if(t.flag-4>=0){
            for(int i=0;i<8;i++)
                temp.s[i]=t.s[i];
            swap(temp.s[t.flag],temp.s[t.flag-4]);
            if(vis[temp.s[0]][temp.s[1]][temp.s[2]][temp.s[3]][temp.s[4]][temp.s[5]][temp.s[6]][temp.s[7]]==0){
                vis[temp.s[0]][temp.s[1]][temp.s[2]][temp.s[3]][temp.s[4]][temp.s[5]][temp.s[6]][temp.s[7]]=inf;
                temp.flag=t.flag-4;
                temp.time=t.time+1;
                q.push(temp);
            }
        }
    }

}
int main(){
    #ifdef SIYU
    freopen("in.txt","r",stdin);
    #endif // SIYU
    memset(vis,0,sizeof(vis));
    bfs();
    while(cin>>a[0]>>a[1]>>a[2]>>a[3]>>a[4]>>a[5]>>a[6]>>a[7]){
        if(vis[a[0]][a[1]][a[2]][a[3]][a[4]][a[5]][a[6]][a[7]]==-1)
            cout<<"0"<<endl;
        else
            cout<<vis[a[0]][a[1]][a[2]][a[3]][a[4]][a[5]][a[6]][a[7]]<<endl;
    }
    return 0;
}