#include <bits/stdc++.h>
using namespace std;
long long power(long long x, long long y) {
  long long res = 1;
  while (y > 0) {
    if (y & 1) res = (res * x) % 998244353;
    y = y / 2;
    if (y != 0) x = (x * x) % 998244353;
  }
  return res;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n, c = 0, i, j, ct = 0, ans = 0, x, y;
  cin >> n;
  string s, t;
  cin >> s >> t;
  set<int> v, w;
  for (i = 0; i < n; i++) {
    if (s[i] == '0' && t[i] == '1') {
      v.insert(i);
    } else if (s[i] == '1' && t[i] == '0') {
      w.insert(i);
    }
    if (s[i] == '1') c++;
    if (t[i] == '1') ct++;
  }
  if (ct != c)
    cout << "-1";
  else {
    if (v.size() == 0) {
      cout << "0";
      return 0;
    }
    int flag = 1;
    while (v.size() || w.size()) {
      if (flag) {
        x = *v.begin();
        y = *w.begin();
        flag = 0;
        v.erase(v.begin());
        w.erase(w.begin());
      }
      if (x < y) {
        auto it = v.lower_bound(y);
        if (it == v.end()) {
          ans++;
          flag = 1;
        } else {
          x = *it;
          auto it1 = w.lower_bound(x);
          if (it1 == w.end()) {
            ans++;
            flag = 1;
          } else {
            v.erase(it);
            y = *it1;
            w.erase(it1);
          }
        }
      } else {
        auto it = w.lower_bound(x);
        if (it == w.end()) {
          ans++;
          flag = 1;
        } else {
          y = *it;
          auto it1 = v.lower_bound(y);
          if (it1 == v.end()) {
            ans++;
            flag = 1;
          } else {
            x = *it1;
            v.erase(it1);
            w.erase(it);
          }
        }
      }
    }
    if (flag == 0) ans++;
    cout << ans;
  }
  return 0;
}
