//Date: 2025-07-19 13:53:49 #include using namespace std; #define int long long #define P emplace_back #define CLEAR(a, v) memset(a, (v), sizeof(a)) #define pii pair #define fi first #define se second #define rep(i, a, b) for(int i = (a); i <= (b); i++) #define per(i, a, b) for(int i = (a); i >= (b); i--) //char buf[1 << 20], *p1, *p2; //#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 20, stdin), p1 == p2) ? EOF : *p1++) inline int rd() { int s = 0, m = 0; char ch = getchar(); while(!isdigit(ch)) {if(ch == '-') m = 1; ch = getchar();} while(isdigit(ch)) s = (s << 3) + (s << 1) + (ch ^ 48), ch = getchar(); return m ? -s : s; } bool MBE; namespace SOLVER { const int N = 2e5 + 5; int n, a[N], b[N]; char s[N], t[N]; vector g1, g2; void MAIN() { n = rd(); scanf("%s%s", s + 1, t + 1); rep(i, 1, n - 1) a[i] = (s[i] - 'A') ^ (s[i + 1] - 'A'), b[i] = (t[i] - 'A') ^ (t[i + 1] - 'A'); for(int i = 2; i <= n; i += 2) a[i] ^= 1, b[i] ^= 1; rep(i, 1, n) {if(a[i]) g1.P(i); if(b[i]) g2.P(i);} sort(g1.begin(), g1.end()); sort(g2.begin(), g2.end()); if(g1.size() != g2.size()) {return puts("-1"), void();} int ans = 0; rep(i, 0, (int)g1.size() - 1) ans += abs(g1[i] - g2[i]); cout << ans << endl; } } bool MED; signed main() { // freopen(".in", "r", stdin); freopen(".out", "w", stdout); // cin.tie(0), cout.tie(0), ios::sync_with_stdio(0); for(int tt = 1; tt; tt--) SOLVER::MAIN(); cerr << (&MBE - &MED) / 1024 << " KB, " << 1000 * clock() / CLOCKS_PER_SEC << " ms\n"; return 0; }