#include static char P[1000004]; static char Q[1000004]; static int R[4][4]; static int genei(char c) { if (c == 'A') return 0; if (c == 'C') return 1; if (c == 'G') return 2; return 3; } static int getmin(void) { int i = 0, mi = -1; for (; i < 16; i++) { if (!R[i>>2][i&3]) continue; if (mi == -1 || R[i>>2][i&3] < R[mi>>2][mi&3]) mi = i; } return mi; } static int dfs(int s, int e, int d) { if (d <= 0) return -1; if (s == e) return 0; int i = 0, m = -1; for (; i < 4; i++) { if (!R[s][i]) continue; int l = dfs(i, e, d-1); if (l < 0) continue; l = l<<4 | (s<<2) | i; if (m != -1 && l > m) continue; m = l; } return m; } int main() { int i = 0; long long r = 0; scanf("%s %s", P, Q); for (; P[i] && Q[i]; i++) { int p = genei(P[i]); int q = genei(Q[i]); if (p != q) R[p][q]++; } while (1) { int mi = getmin(); if (mi < 0) break; int vi = R[mi>>2][mi&3]; R[mi>>2][mi&3] = 0; int l = dfs(mi&3, mi>>2, 4); if (l < 0) return -1; for (i = 0; i < 16; i += 4) { int li = (l >> i) & 15; if ((li>>2) != (li&3)) { R[li>>2][li&3] -= vi; r += vi; } } } printf("%lld\n", r); return 0; }