#include <bits/stdc++.h>
using namespace std;
const int N = (1 << 15) + 10;
int s, st, ed, vis[N], dis[N];
int dx[4][2] = {{-1, 0}, {0, -1}, {0, 1}, {1, 0}};
char c;
int expand(queue <int> & q, int mk) {
int t = q.front(); q.pop();
for (int p = 0; p < 16; p++) {
if (t & (1 << p)) {
int px = p / 4, py = p % 4;
for (int i = 0; i < 4; i++) {
int nx = px + dx[i][0], ny = py + dx[i][1];
if (nx < 0 || nx >= 4 || ny < 0 || ny >= 4) continue;
int np = nx * 4 + ny, nt = t;
if (t & (1 << np)) continue;
nt ^= (1 << i), nt ^= (1 << np);
if (!vis[nt]) {
dis[nt] = dis[t] + 1;
vis[nt] = mk;
q.push(nt);
}
else if (vis[nt] != mk) return dis[t] + dis[nt] + 1;
}
}
}
return -1;
}
int bfs() {
queue <int> q1, q2;
q1.push(st), q2.push(ed);
vis[st] = 1, vis[ed] = -1;
while (q1.size() && q2.size()) {
int res = (q1.size() < q2.size() ? expand(q1, 1) : expand(q2, -1));
if (res != -1) return res;
}
return -1;
}
int main() {
for (int i = 1 << 15; i; i >>= 1) {
cin >> c;
st += (c - '0') * i;
}
for (int i = 1 << 15; i; i >>= 1) {
cin >> c;
ed += (c - '0') * i;
}
if (st == ed) {
cout << 0;
return 0;
}
cout << bfs() << '\n';
return 0;
}