#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<string>
#define N 1000000
using namespace std;

map<string ,int> m;
struct node
{
    string s;
    int t;
}st,q[N];
string e="01234567";
int Find(string s)
{
    for(int i=0;i<8;i++)
    {
        if(s[i]=='0')
            return i;
    }
}
int bfs(string s)
{
    int re=0,fr=0;
     node st; st.s=s; st.t=0;
     m[s]=1; q[re++]=st;
     while(fr!=re)
     {
         node u=q[fr];
         if(u.s==e) return u.t;
         int k=Find(u.s);
         //cout<<" "<<k<<" "<<u.s<<endl;
         if(k==0)
         {
             node v; v.s=u.s; v.t=u.t+1;
             swap(v.s[0],v.s[1]);
             if(m[v.s]==0) q[re++]=v,m[v.s]=1;

             v.s=u.s; swap(v.s[0],v.s[4]);
             if(m[v.s]==0) q[re++]=v,m[v.s]=1;
         }
         if(k==1)
         {
             node v; v.s=u.s; v.t=u.t+1;
             swap(v.s[1],v.s[0]);
             if(m[v.s]==0) q[re++]=v,m[v.s]=1;

             v.s=u.s; swap(v.s[1],v.s[2]);
             if(m[v.s]==0) q[re++]=v,m[v.s]=1;

             v.s=u.s; swap(v.s[1],v.s[5]);
             if(m[v.s]==0) q[re++]=v,m[v.s]=1;
         }
         if(k==2)
         {
             node v; v.s=u.s; v.t=u.t+1;
             swap(v.s[2],v.s[1]);
             if(m[v.s]==0) q[re++]=v,m[v.s]=1;

             v.s=u.s;  swap(v.s[2],v.s[3]);
             if(m[v.s]==0) q[re++]=v,m[v.s]=1;

             v.s=u.s;  swap(v.s[2],v.s[6]);
             if(m[v.s]==0) q[re++]=v,m[v.s]=1;
         }
         if(k==3)
         {
             node v; v.s=u.s; v.t=u.t+1;
             swap(v.s[3],v.s[2]);
             if(m[v.s]==0) q[re++]=v,m[v.s]=1;

             v.s=u.s;  swap(v.s[3],v.s[7]);
             if(m[v.s]==0) q[re++]=v,m[v.s]=1;
         }
         if(k==4)
         {
             node v; v.s=u.s; v.t=u.t+1;
             swap(v.s[4],v.s[0]);
             if(m[v.s]==0) q[re++]=v,m[v.s]=1;

             v.s=u.s;  swap(v.s[4],v.s[5]);
             if(m[v.s]==0) q[re++]=v,m[v.s]=1;
         }
         if(k==5)
         {
             node v; v.s=u.s; v.t=u.t+1;
             swap(v.s[5],v.s[1]);
             if(m[v.s]==0) q[re++]=v,m[v.s]=1;

             v.s=u.s;  swap(v.s[5],v.s[4]);
             if(m[v.s]==0) q[re++]=v,m[v.s]=1;

             v.s=u.s;  swap(v.s[5],v.s[6]);
             if(m[v.s]==0) q[re++]=v,m[v.s]=1;
         }
         if(k==6)
         {
             node v; v.s=u.s; v.t=u.t+1;
             swap(v.s[6],v.s[2]);
             if(m[v.s]==0) q[re++]=v,m[v.s]=1;

             v.s=u.s;  swap(v.s[6],v.s[5]);
             if(m[v.s]==0) q[re++]=v,m[v.s]=1;

             v.s=u.s;  swap(v.s[6],v.s[7]);
             if(m[v.s]==0) q[re++]=v,m[v.s]=1;
         }
         if(k==7)
         {
             node v; v.s=u.s; v.t=u.t+1;
             swap(v.s[7],v.s[3]);
             if(m[v.s]==0) q[re++]=v,m[v.s]=1;

             v.s=u.s;  swap(v.s[7],v.s[6]);
             if(m[v.s]==0) q[re++]=v,m[v.s]=1;
         }
         fr++;
     }
}
int main()
{
    string a;
    while(cin>>a)
    {
        string s=a;
        for(int i=0;i<7;i++)
        {
            cin>>a;
            s+=a;
        }
        m.clear();
        printf("%d\n",bfs(s));
    }
    return 0;
}