#include <iostream>
#include <string>
#include <algorithm>
#include <map>
#include <queue>
using namespace std;
 
map<string, int> dp;
int direction[4] = { 1, -1, 4, -4};  //可以向左向右向上向下

//与前几?的bfs不同，?次的bfs没有明?的移??象，看似任意一个数都可以当成?象移?
//??我?只需要抓住一个格子就行，比如我?把0作?移??象，那?0在地?中漫游所有的格子得到的肯定就是??的解空?
//由于?目的?入是多个case，如果??个case都?行一遍bfs就会TLE
//??我?祭出dp技能，只需要一次bfs就将解空?算出来，以后?个case只要到解空?中去找就行了
//0漫游整个字串

void bfs()
{
    queue<string> que;
    que.push("01234567");
    dp["01234567"] = 0;

    while(!que.empty())
    {
        string now = que.front();
        que.pop();
        
        //p是'0'的位置
        int p = 0;

        for(int j = 0; j < 8; j++)
        {
            if(now[j] == '0')
            {
                p = j;
                break;
            }
        }
 
        for(int i = 0; i < 4; i++)
        {
            int n = p + direction[i];
            if(0 <= n && n < 8 && 
                !(p == 3 && i == 0) && // 右上角不能再往右了
                !(p == 4 && i == 1))   // 左下角不能再往左了
            {
                string next = now;
                swap(next[p], next[n]);
                if(dp.find(next) == dp.end())
                {
                    dp[next] = dp[now] + 1;
                    que.push(next);
                }
            }
        }
    }
}
 
int main()
{
 
    bfs();
    string line;

    while(getline(cin, line))
    {
        line.erase(remove(line.begin(), line.end(), ' '), line.end());
        cout << dp[line] << endl;
    }
 
    return 0;
}

/*
?目附?
?出0~7的序列（2*4），只能0和周?数字交?，?最少交?多少次可以是?出的序列?成0 1 2 3 4 5 6 7。
有一个2*4的8个格子
0 1 2 3
4 5 6 7
是最最初的状?
0代表?里没有放?牌，其他数字表示放了相?数字的?牌。
?可以?行如下操作：移?0周?的?牌到0，然后移?后，被移?的那个位置就没有?牌了。
?入??束的?个?牌的位置
比如：
1 0 2 3 4 5 6 7
1 0 2 3
4 5 6 7
只需要把1移?到0的位置，???1最少，?出此最少??。
*/