#include #define st first #define nd second #define fi first #define se second #define pb push_back #define ps(v) cout << v << " " #define pln(v) cout << v << "\n" #define entr cout << "\n" using namespace std; typedef long long ll; typedef long double ld; typedef pair pll; const ll MAX = 4; const ll INF = 1e9; ll g[MAX][MAX]; ll dis[MAX][MAX], last[MAX][MAX]; ll toNum(char c) { switch (c) { case 'A': return 0; case 'C': return 1; case 'G': return 2; case 'T': return 3; } } char toC(ll c) { switch (c) { case 0: return 'A'; case 1: return 'C'; case 2: return 'G'; case 3: return 'T'; } } void floyd() { for (int i = 0; i < MAX; ++i) { for (int j = 0; j < MAX; ++j) if (i != j && g[i][j] > 0) { dis[i][j] = 1; } else dis[i][j] = INF; } for (int k = 0; k < MAX; ++k) { for (int i = 0; i < MAX; ++i) { for (int j = 0; j < MAX; ++j) { if (dis[i][k] + dis[k][j] < dis[i][j]) { dis[i][j] = dis[i][k] + dis[k][j]; } } } } } int main() { ios_base::sync_with_stdio(0); string str1, str2; cin >> str1 >> str2; for (int i = 0; i < str1.size(); ++i) { ll a = toNum(str1[i]); ll b = toNum(str2[i]); g[a][b]++; } vector pom; ll result = 0; for (int mask = 1; mask < 16; ++mask) if (__builtin_popcount(mask) > 1){ pom.clear(); for (int i = 0; i < 4; ++i) if (mask & (1 << i)) { pom.pb(i); } do { ll cycles = g[pom[0]][pom[1]]; for (int i = 0; i + 1 < pom.size(); ++i) { cycles = min(cycles, g[pom[i]][pom[i+1]]); } cycles = min(cycles, g[pom[pom.size()-1]][pom[0]]); for (int i = 0; i + 1 < pom.size(); ++i) { g[pom[i]][pom[i+1]] -= cycles; } g[pom[pom.size()-1]][pom[0]] -= cycles; result += cycles *(__builtin_popcount(mask) - 1); /* for (int i = 0; i < pom.size(); ++i) { cout << toC(pom[i]); } cout << endl; * */ } while (next_permutation(pom.begin(), pom.end())); } cout << result; return 0; }