#include<bits/stdc++.h>
#define FOR(i,b,e) for(int i = b; i<=e; i++)
#define SIZE(x) ((int)(x).size())

using namespace std;

const int maxn = 1000042;
const int INF = 1000000001;

int goal[maxn];
int act[maxn];

map<char, int> ma = {
	{'A', 0},
	{'C', 1},
	{'G', 2},
	{'T', 3},
};

void gooderase(vector<int> &v, int p)
{
	swap(v.back(), v[p]);
	v.pop_back();
}

set<int> pos[4][4];

int main() {
    ios_base::sync_with_stdio(0);
	cin.tie(0);

	string gg, aa;
	cin >> gg >> aa;

	int n = SIZE(gg);

	FOR(i, 0, SIZE(gg)-1)
	{
		goal[i+1] = ma[gg[i]];
		act[i+1] = ma[aa[i]];
	}
	

	FOR(i, 1, n)
	{
		if(goal[i] != act[i])
		{
			pos[goal[i]][act[i]].insert(i);
		}
	}

	int ans = 0;

	FOR(i, 1, n)
	{
		if(goal[i] == act[i])
			continue;

		if(!pos[act[i]][goal[i]].empty())
		{
			auto other = pos[act[i]][goal[i]].begin();
			int oi = *other;
			pos[act[i]][goal[i]].erase(other);
			pos[goal[i]][act[i]].erase(i);
			swap(act[i], act[oi]);
			ans++;
		}
		else
			FOR(v, 0, 3)
			{
				if(!pos[v][goal[i]].empty())
				{
					int oi = *(pos[v][goal[i]].begin());
					pos[goal[i]][act[i]].erase(i);
					pos[v][goal[i]].erase(oi);
					swap(act[i], act[oi]);
					ans++;
					pos[v][act[oi]].insert(oi);
					break;
				}
			}
	}

	/*
	bool ok = true;
	FOR(i, 1, n)
		if(goal[i] != act[i])
			ok = false;
	assert(ok);
	*/

	cout << ans << '\n';
}

