#include <cstdio>
#include <queue>
#include <cstring>
using namespace std;

int d[16777219];

int dx[4]={1,-1,4,-4};
struct node{
    int x;
    int mapp[9];
};

void bfs(){
    node nd;
    nd.x=0;
    int z=0;
    for(int i=0;i<8;i++){
        nd.mapp[i]=i;
        z*=8;
        z+=i;
    }
    d[z]=0;

    queue<node> q;
    q.push(nd);

    while(!q.empty()){
        node t=q.front();
        q.pop();

        for(int i=0;i<4;i++){
            int nx=dx[i]+t.x;

            if(0<=nx&&nx<=7&&!(nx==3&&i==0)&&!(nx==4&&i==1)){

                int zz=0;
                for(int j=0;j<8;j++){
                    zz*=8;
                    zz+=t.mapp[j];
                    nd.mapp[j]=t.mapp[j];
                }
                nd.x=nx;
                swap(nd.mapp[nx],nd.mapp[t.x]);

                int z=0;
                for(int j=0;j<8;j++){
                    z*=8;
                    z+=nd.mapp[j];
                }

                if(d[z]==-1){
                    d[z]=d[zz]+1;
                    q.push(nd);
                }
            }
        }

    }


}

int main(){
    memset(d,-1,sizeof(d));
    bfs();
    int a[10];
    while(~scanf("%d %d %d %d %d %d %d %d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7])){
        int z=0;
        for(int i=0;i<8;i++){
            z*=8;
            z+=a[i];
        }
        printf("%d\n",d[z]);
    }

    return 0;
}

