#include <bits/stdc++.h>
using namespace std;

// macros
#define overload_rep(va_0, va_1, va_2, name, ...) name
#define rep_0(i, n) for(int i = 0; i < (n); ++i)
#define rep_1(i, x, y) for(int i = (x); i <= (y); ++i)
#define rep(...) overload_rep(__VA_ARGS__, rep_1, rep_0)(__VA_ARGS__)
#define all(a) a.begin(), a.end()
#ifndef STOP_DEBUG
#define debug(...)\
    do { cerr << boolalpha << "[" << #__VA_ARGS__ << "]:";\
    debug_cerr(__VA_ARGS__); cerr << noboolalpha; } while (0)
#else
#define debug(...)
#endif

// functions
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }
void debug_cerr() { cerr << '\n'; }
template<class Head, class... Tail>
void debug_cerr(Head head, Tail... tail) {
    cerr << ' ' << head;
    debug_cerr(tail...);
}

// cin/cout setup
struct IoSetup {
    IoSetup() {
        cin.tie(nullptr);
        ios::sync_with_stdio(false);
        cout << fixed << setprecision(20);
    }
} iosetup;

// libraries

// declarations

// solve
int main() {

    string A, B;
    cin >> A >> B;
    int N = A.size();

    if(B == string(N, '0')){
        cout << (A == B ? 0 : -1) << '\n';
        return 0;
    }

    B += B;
    int posl, posr;
    vector<int> sum(2 * N + 1, 0), toL(2 * N), toR(2 * N);
    rep(i, 2 * N){
        if(B[i] == '1'){
            sum[i + 1]++;
            posl = i;
        }
        if(B[2 * N - i - 1] == '1'){
            posr = 2 * N - i - 1;
        }
        sum[i + 1] += sum[i];
    }

    posl -= 2 * N;
    posr += 2 * N;
    rep(i, 2 * N){
        if(B[i] == '1')posl = i;
        toL[i] = posl;
    }
    for(int i = 2 * N - 1; i >= 0; --i){
        if(B[i] == '1')posr = i;
        toR[i] = posr;
    }

    int ans = 2 * N;
    for(int d = 0; d <= N; ++d){
        int cnt = 0;
        vector<pair<int, int>> lr;
        rep(i, N){
            if(A[i] == '0' && B[i + d] == '1')cnt++;
            if(A[i] == '1' && B[i + d] == '0'){
                cnt++;
                if(sum[i + d + 1] - sum[i] == 0){
                    lr.push_back(make_pair((i + N) - toL[i + N], toR[i + d] - (i + d)));
                }
            }
        }
        sort(lr.rbegin(), lr.rend());
        int mini = 2 * N, maxi = 0;
        for(const auto& p : lr){
            chmin(mini, p.first + maxi);
            chmax(maxi, p.second);
        }
        chmin(mini, maxi);
        chmin(ans, d + 2 * mini + cnt);
    }
    for(int d = -N; d < 0; ++d){
        int cnt = 0;
        vector<pair<int, int>> lr;
        rep(i, N){
            if(A[i] == '0' && B[i + N + d] == '1')cnt++;
            if(A[i] == '1' && B[i + N + d] == '0'){
                cnt++;
                if(sum[i + N + 1] - sum[i + N + d] == 0){
                    lr.push_back(make_pair((i + N + d) - toL[i + N + d], toR[i + N] - (i + N)));
                }
            }
        }
        sort(lr.rbegin(), lr.rend());
        int mini = 2 * N, maxi = 0;
        for(const auto& p : lr){
            chmin(mini, p.first + maxi);
            chmax(maxi, p.second);
        }
        chmin(mini, maxi);
        chmin(ans, -d + 2 * mini + cnt);
    }

    cout << ans << '\n';
    return 0;

}


Measured memory_bytes: 384