#include<iostream>
#include<algorithm>
#include<cstring>
#include<iomanip>
#include<cctype>
#include<string>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#include<set>
#define LL long long
#define PF(x) ((x)*(x))
#define LF(x) ((x)*PF(x))
#define IF(i,x,y) for(int i=x;i<=y;i++)
#define DF(i,x,y) for(int i=x;i>=y;i--)

using namespace std;
const int INF=1<<31-1;
const int max9=1e9;
const int max6=1e6;
const int max3=1e3;
const double pi=4.0*atan(1.0);
const int mod=1000000007;
const double E=exp(1.0);
const double EXP=1e-8;

int gcd(int a,int b){return b==0?a:gcd(b,a%b);}
int vis[8][8][8][8][8][8][8][8];
struct node
{
    int t[10];
    int dis;
};
void store(int t[])
{
    vis[t[0]][t[1]][t[2]][t[3]][t[4]][t[5]][t[6]][t[7]]=1;
}
bool Find(int t[])
{
    if(vis[t[0]][t[1]][t[2]][t[3]][t[4]][t[5]][t[6]][t[7]]) return true;
    vis[t[0]][t[1]][t[2]][t[3]][t[4]][t[5]][t[6]][t[7]]=1;
    return false;
}
bool en(int t[])
{
    for(int i=0;i<8;i++) if(t[i]!=i) return false;
    return true;
}
queue<node> q;
int main()
{
    node st;
    while(cin >> st.t[0])
    {
        for(int i=1;i<8;i++)
            cin >> st.t[i];
        st.dis=0;
        if(en(st.t))
            {
                cout << st.dis << endl;
                continue;
            }
        memset(vis,0,sizeof(vis));
        while(!q.empty()) q.pop();
        q.push(st);
        store(st.t);
        while(!q.empty())
        {
            node e=q.front();
            q.pop();
            node m=e;
            m.t[0]=e.t[4];
            m.t[4]=e.t[0];
            if(en(m.t))
            {
                cout << m.dis+1 << endl;
                break;
            }
            if(!Find(m.t))
            {
                m.dis+=1;
                q.push(m);
            }

            m=e;

            m.t[1]=e.t[5];
            m.t[5]=e.t[1];
            if(en(m.t))
            {
                cout << m.dis+1 << endl;
                break;
            }
            if(!Find(m.t))
            {
                m.dis+=1;
                q.push(m);
            }

            m=e;
            m.t[2]=e.t[6];
            m.t[6]=e.t[2];
            if(en(m.t))
            {
                cout << m.dis+1 << endl;
                break;
            }
            if(!Find(m.t))
            {
                m.dis+=1;
                q.push(m);
            }
            m=e;
            m.dis++;
            m.t[3]=e.t[7];
            m.t[7]=e.t[3];
            if(en(m.t))
            {
                cout << m.dis << endl;
                break;
            }
            if(!Find(m.t))
            {
                q.push(m);
            }
            m=e;
            m.dis++;
            m.t[0]=e.t[1];
            m.t[1]=e.t[0];
            if(en(m.t))
            {
                cout << m.dis << endl;
                break;
            }
            if(!Find(m.t))
            {
                q.push(m);
            }
            m=e;
            m.dis++;
            m.t[1]=e.t[2];
            m.t[2]=e.t[1];
            if(en(m.t))
            {
                cout << m.dis << endl;
                break;
            }
            if(!Find(m.t))
            {
                q.push(m);
            }
            m=e;
            m.dis++;
            m.t[2]=e.t[3];
            m.t[3]=e.t[2];
            if(en(m.t))
            {
                cout << m.dis << endl;
                break;
            }
            if(!Find(m.t))
            {
                q.push(m);
            }
            m=e;
            m.dis++;
            m.t[4]=e.t[5];
            m.t[5]=e.t[4];
            if(en(m.t))
            {
                cout << m.dis << endl;
                break;
            }
            if(!Find(m.t))
            {
                q.push(m);
            }
            m=e;
            m.dis++;
            m.t[5]=e.t[6];
            m.t[6]=e.t[5];
            if(en(m.t))
            {
                cout << m.dis << endl;
                break;
            }
            if(!Find(m.t))
            {
                q.push(m);
            }
            m=e;
            m.dis++;
            m.t[6]=e.t[7];
            m.t[7]=e.t[6];
            if(en(m.t))
            {
                cout << m.dis << endl;
                break;
            }
            if(!Find(m.t))
            {
                q.push(m);
            }
        }
    }
    return 0;
}