#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[9][9][9][9][9][9][9][9];
struct NODE{
    int flag;
    int s[10];
    int time;
}t,temp;
int a[10];
int bfs(){
    queue<NODE>q;
    vis[a[0]][a[1]][a[2]][a[3]][a[4]][a[5]][a[6]][a[7]]=1;
    for(int i=0;i<8;i++){
        t.s[i]=a[i];
        if(a[i]==0) t.flag=i;
    }
    t.time=0;
    q.push(t);
    while(!q.empty()){
        t=q.front();q.pop();
        if(t.flag==0){
            int u;
            for(u=0;u<8;u++){
                if(u!=t.s[u])
                    break;
            }
            if(u==8){
                //for(u=0;u<8;u++){
                    //cout<<" "<<t.s[u];
                //}cout<<endl;
                return 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]]=1;
                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]]=1;
                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]]=1;
                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]]=1;
                temp.flag=t.flag-4;
                temp.time=t.time+1;
                q.push(temp);
            }
        }
    }

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