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

#define N 8

struct State
{
  int p[N];
  int z;
  int d;
};

void swap(int& a, int& b)
{
  int tmp = a;
  a = b;
  b = tmp;
}

int main()
{
  for (int i=0; i<1000; i++)
  {
  int P[40320][N];

  struct State s;
  for (int i=0; i<N; i++)
  {
    cin >> s.p[i];
    if (s.p[i] == 0)
    {
      s.z = i;
    }
  }
  s.d = 0;

  queue<struct State> que;
  que.push(s);

  int cnt = 0;
  while (!que.empty())
  {
    //cout << "cnt:" << cnt << endl;
    s = que.front(); que.pop();

    bool flg1 = true;
    for (int i=0; i<N; i++)
    {
      if (s.p[i] != i)
      {
	flg1 = false;
	break;
      }
    }
    if (flg1)
    {
      cout << s.d << endl;
      break;
    }

    for (int i=0; i<4; i++)
    {
      State t = s;
      if (i == 0)
      {
	if (s.z < 4)
	{
	  continue;
	}
	swap(t.p[t.z], t.p[t.z-4]);
	t.z = t.z-4;
      }
      if (i == 1)
      {
	if (s.z > 3)
	{
	  continue;
	}
	swap(t.p[t.z], t.p[t.z+4]);
	t.z = t.z+4;
      }
      if (i == 2)
      {
	if (s.z%4 == 0)
	{
	  continue;
	}
	swap(t.p[t.z], t.p[t.z-1]);
	t.z = t.z-1;
      }
      if (i == 3)
      {
	if (s.z%4 == 3)
	{
	  continue;
	}
	swap(t.p[t.z], t.p[t.z+1]);
	t.z = t.z+1;
      }
      ++t.d;

      /*
      for (int j=0; j<N; j++)
	cout << setw(3) << t.p[j];
      cout << endl;
      int a;
      cin >> a;
      */

      bool flg2 = true;
      for (int j=0; j<cnt; j++)
      {
	if (!flg2)
	{
	  break;
	}
	for (int k=0; k<N; k++)
	{
	  if (t.p[k] != P[j][k])
	  {
	    /*
	    cout << "i:" << i << " j:" << j << " k:" << k << endl;
	    cout << "t.p[k]:" << t.p[k] << " P[j][k]:" << P[j][k] << endl;
	    int a;
	    cin >> a;
	    */
	    break;
	  }
	  if (k == N-1)
	  {
	    flg2 = false;
	  }
	}
      }
      if (flg2)
      {
	  que.push(t);
	  for (int j=0; j<N; j++)
	  {
	    P[cnt][j] = t.p[j];
	  }
	  ++cnt;
      }
    }
  }
  }

  return 0;
}