#include <iostream>
#include <map>
#include <queue>
using namespace std;

long long encode(const int *a)
{
  long long x = 0;
  for (int i = 0; i < 8; i++) {
    x = 8*x + a[i];
  }
  return x;
}

void decode(int *a, long long x)
{
  for (int i = 0; i < 8; i++) {
    a[7-i] = x % 8;
    x /= 8;
  }
}

int bfs(long long init)
{
  map<long long, int> dist;
  dist.insert(make_pair(init, 0));
  queue<long long> q;
  q.push(init);
  while (!q.empty()) {
    const long long s = q.front();
    q.pop();
    const int d = dist[s];
    int a[8];
    decode(a, s);
    for (int i = 0; i < 8; i++) {
      if (a[i] != i) {
        goto L;
      }
    }
    return d;
L:
    for (int i = 0; i < 8; i++) {
      if (a[i] != 0) {
        continue;
      }
      if (i % 4 != 0) {
        // left
        swap(a[i], a[i-1]);
        const long long u = encode(a);
        if (!dist.count(u)) {
          dist.insert(make_pair(u, d+1));
          q.push(u);
        }
        swap(a[i], a[i-1]);
      }
      if (i % 4 != 3) {
        // right
        swap(a[i], a[i+1]);
        const long long u = encode(a);
        if (!dist.count(u)) {
          dist.insert(make_pair(u, d+1));
          q.push(u);
        }
        swap(a[i], a[i+1]);
      }
      if (i < 4) {
        // below
        swap(a[i], a[i+4]);
        const long long u = encode(a);
        if (!dist.count(u)) {
          dist.insert(make_pair(u, d+1));
          q.push(u);
        }
        swap(a[i], a[i+4]);
      }
      if (i >= 4) {
        // above
        swap(a[i], a[i-4]);
        const long long u = encode(a);
        if (!dist.count(u)) {
          dist.insert(make_pair(u, d+1));
          q.push(u);
        }
        swap(a[i], a[i-4]);
      }
    }
  }
  throw __LINE__;
}

int main()
{
  int x;
  while (cin >> x) {
    int a[8];
    a[0] = x;
    for (int i = 1; i < 8; i++) {
      cin >> a[i];
    }
    cout << bfs(encode(a)) << endl;
  }
  return 0;
}