#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <set>
#include <cassert>

using namespace std;

vector<int> opos(const string& s) {
    int n = s.length();
    vector<int> ps;
    for (int i = 0; i < n; ++i) {
        if (s[i] == '1') ps.push_back(i);
    }
    return ps;
}

void solve() {
    int n;
    string s, t;
    cin >> n >> s >> t;

    if (count(s.begin(), s.end(), '0') !=
        count(t.begin(), t.end(), '0')) {
        cout << "-1\n";
        return;
    }

    int ans = 0;
    for (int q = 0; q < 2; ++q) {
        auto sps = opos(s), tps = opos(t);
        int m = sps.size();

        int p = 0;
        for (int i = 0; i < m; ++i) {
            auto& si = sps[i];
            auto ti = tps[i];

            si = max(si, p);
            if (si < ti) {
                ans += ti - si;
                si = ti;
            }
            p = si + 1;
        }

        reverse(s.begin(), s.end());
        reverse(t.begin(), t.end());
    }

    cout << ans << "\n";
}

int main() {
    cin.tie(nullptr);
    ios::sync_with_stdio(false);

    solve();

    return 0;
}

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using P = pair<int, int>;
#define al(a) a.begin(), a.end()
#define ral(a) a.rbegin(), a.rend()
#define sz(a) (int)a.size()

// s= 000101
// t= 110000
// ans=4

// s= 0101011
// t= 1111000
// ans=3

// s= 1111000
// t= 0101011
// ans=3

// s= 1101100
// t= 0101011
// ans=3

// s= 11010100
// t= 01010101
// ans=4

// s= 11001001
// t= 01010101
// ans=3

// 0の位置が一致していないときは、1個ずつ合わせていくしか無い
int main() {
  int n;
  cin >> n;
  string s, t;
  cin >> s >> t;
  vector<vector<int>> z(2);
  for (int i = 0; i < n; ++i) {
    if (s[i] == '0') z[0].push_back(i);
    if (t[i] == '0') z[1].push_back(i);
  }

  if (sz(z[0]) != sz(z[1])) {
    cout << -1 << endl;
    return 0;
  }

  int ans = 0;
  for (int i = 0; i < sz(z[0]); ++i) {
    if (z[0][i] != z[1][i]) ++ans;
  }
  cout << ans << endl;
}

// 0を何個中継するか?
// int main() {
//   int n;
//   cin >> n;
//   string s, t;
//   cin >> s >> t;

//   vector<int> cnt(2);
//   for (int i = 0; i < n; ++i) {
//     if (s[i] == '1') ++cnt[0];
//     if (t[i] == '1') ++cnt[1];
//   }
//   if (cnt[0] != cnt[1]) {
//     cout << -1 << endl;
//     return 0;
//   }

//   int ans = 0;
//   bool c = false;
//   vector<int> cnt2(2);
//   for (int i = 0; i < n; ++i) {
//     if (!c && s[i] != t[i]) {
//       c = true;
//       if (s[i] == '1') ++ans;
//     }
//     if (c) {
//       if (s[i] == '1') cnt2[0]++;
//       if (t[i] == '1') cnt2[1]++;
//     }
//     if (c && s[i] == '0' && cnt2[0] != cnt2[1]) { ++ans; }
//   }
//   cout << ans << endl;
//   return 0;
// }