#include<iostream>
#include<set>
#include<queue>
#include<cstring>
using namespace std;
int dx[4]={0, 0, 1, -1};
int dy[4]={1,-1,0 , 0};
struct node{
string state;
int t;
};
int bfs(const string &state,const string &traget)
{
set<string>jude;
queue<node>q;
q.push({state, 0});
jude.insert(state);
while(q.size())
{
node cur = q.front();q.pop();
if(cur.state == traget) return cur.t;
int s = cur.state.find('0');
int dix = s/2;
int diy = s%2;
for(int i=0;i<4;i++)
{
int sx = dix + dx[i];
int sy = diy + dy[i];
node nextcur = cur;
nextcur.t++;
int s2 = sx*2 +sy;
if(sx >= 0 && sx < 2 && sy >= 0 && sy <2)
{
swap(nextcur.state[s2],nextcur.state[s]);
if(!jude.count(nextcur.state)){
jude.insert(nextcur.state);
q.push(nextcur);
}
}
}
}
return -1;
}
int main()
{
int a[4],b[4];
string state, traget;
for(int i=0;i<4;i++)
{
cin >> a[i];
char c = a[i]+'0';
state+=c;
}
for(int i=0;i<4;i++)
{
cin >> b[i];
char c = b[i]+'0';
traget+=c;
}
cout << bfs(state,traget);
}