#include<bits/stdc++.h>
using namespace std;
string s1,en,st;
map<string,int> vis;
map<string,int> dis;
queue<string> q1,q2;
int dx[] = {0,-1,0,1},dy[] = {1,0,-1,0};
int addd(queue<string> & q,int mk){
string p = q.front();
q.pop();
for(int i = 0;i < 16;++i){
if(p[i] == '0') continue;
int px = i / 4,py = i % 4;
for(int j = 0;j < 4;++j){
int nx = dx[j] + px;
int ny = dy[j] + py;
if(nx >= 0 && nx < 4 && ny >= 0 && ny < 4){
string s2 = p;
swap(s2[nx * 4 + ny],s2[i]);
if(s2[nx * 4 + ny] == '1') continue;
if(vis[s2] == 0){
vis[s2] = mk;
dis[s2] = dis[p] + 1;
q.push(s2);
}
else{
if(vis[s2] != mk){
return dis[s2] + dis[p] + 1;
}
}
}
}
}
return -1;
}
int bfs(){
q1.push(st);
q2.push(en);
vis[st] = 1;
vis[en] = -1;
while(!q1.empty() && !q2.empty()){
int res = q1.size() > q2.size() ? addd(q2,-1) : addd(q1,1);
if(res != -1) return res;
}
return 0;
}
int main(){
for(int i = 0;i < 4;++i){
cin >> s1;
st += s1;
}
for(int i = 0;i < 4;++i){
cin >> s1;
en += s1;
}
cout << bfs();
return 0;
}