#include <bits/stdc++.h>
using namespace std;

const int dx[] = {1, -1, 0, 0};
const int dy[] = {0, 0, -1, 1};

using vi = vector<int>;

map<vi, int> mp; // mp[ある盤面]: その盤面に到るまでの手数

void bfs(vi origin) {
  // キューの初期化
  queue<vi> que;
  que.push(origin);
  // データの初期化
  mp[origin] = 0;

  while (que.size()) {
    // 軸を取り出す
    vi axis = que.front(); que.pop();

    // 0の場所を求める
    int zeroPos = 0;
    for (int i = 0; i< axis.size(); i++) {
      if (axis[i] == 0) zeroPos = i;
    }
    int y = zeroPos / 4, x = zeroPos % 4;
    int pos = y * 4 + x;

    // 軸から行ける場所を列挙
    for (int i = 0; i < 4; i++) {
      int ny = y + dy[i], nx = x + dx[i];
      if (ny < 0 || ny >= 2 || nx < 0 || nx >= 4) continue;
      int npos = ny * 4 + nx;
      vi next = axis;
      swap(next[npos], next[pos]);
      if (mp.count(next)) continue;
      // 行けるならキューとデータを更新する
      mp[next] = mp[axis] + 1;
      que.push(next);
    }
  }
}


signed main() {
  // 前処理
  vector<int> origin(8);
  iota(origin.begin(), origin.end(), 0);
  bfs(origin);

  string s;
  while (getline(cin, s)) {
    vi v;
    for (int i = 0; i < s.size(); i+=2) {
      v.push_back(s[i] - '0');
    }
    // 前処理の結果を出力するだけ
    cout << mp[v] << endl;
  }

  return 0;
}
