#ifndef LOCAL #pragma GCC optimize("O3") #endif #include using namespace std; #define sim template muu & operator<<( #define ris return *this #define R22(r) sim> typename enable_if<1 r sizeof(dud(0)),muu&>::type operator<<(c g) { sim> struct rge {c b, e;}; sim> rge range(c i, c j) {return rge{i, j};} sim> auto dud(c*r)->decltype(cerr << *r); sim> char dud(...); struct muu { #ifdef LOCAL stringstream a; ~muu() {cerr << a.str() << endl;} R22(<) a << boolalpha << g; ris;} R22(==) ris << range(begin(g), end(g));} sim mor rge u) { a << "["; for (c i = u.b; i != u.e; ++i) *this << ", " + 2 * (i == u.b) << *i; ris << "]"; } sim, class b mor pair r){ris << "(" << r.first << ", " << r.second << ")";} #else sim mor const c&){ris;} #endif }; #define debug muu() << __FUNCTION__ << "#" << __LINE__ << ": " #define imie(r...) "[" #r ": " << (r) << "] " #define range(a, b) "[[" #a ", " #b "): " << range(a, b) << "] " #define arr(a, i) "[" #a imie(i) ": " << a[i] << "] " using ll = long long; using ld = long double; using pii = pair ; int maska[4][4]; int kol['Z' + 7]; int main() { kol['A'] = 0; kol['C'] = 1; kol['G'] = 2; kol['T'] = 3; string s1, s2; cin >> s1 >> s2; int N = s1.size(); int kr = 0; for (int i = 0; i < N; i++) { if (s1[i] != s2[i]) { maska[kol[s1[i]]][kol[s2[i]]]++; kr++; } } int cykle = 0; for (int i = 0; i < 4; i++) { for (int w = 0; w < 4; w++) { if (i != w) { int g = min(maska[i][w], maska[w][i]); maska[i][w] -= g; maska[w][i] -= g; cykle += g; } } } for (int i = 0; i < 4; i++) { for (int w = 0; w < 4; w++) { for (int k = 0; k < 4; k++) { if (i != w && w != k) { int g = min(maska[i][w], maska[w][k]); g = min(g, maska[k][i]); maska[i][w] -= g; maska[w][k] -= g; maska[k][i] -= g; cykle += g; } } } } int maxi = 0; for (int i = 0; i < 4; i++) { for (int w = 0;w < 4; w++) { maxi = max(maxi, maska[i][w]); } } cykle += maxi; printf("%d", kr - cykle); }