5411567f167d5bf5e9c1cfb97d36321da1fe45b987b8bff6c830358155636d6f
// https://szkopul.edu.pl/problemset/problem/EmpCZIOll79YHrpzDDa-PrxW/site/?key=statement
// OIJ XVII 2 etap
#include <iostream>
#include <map>
#include <vector>
std::map<int, int> arr;
int main() {
std::ios_base::sync_with_stdio(0);
std::cin.tie(0);
std::cout.tie(0);
std::string s;
std::cin >> s;
std::map<int, int> m;
for (const auto& c : s) {
m[c]++;
}
for (const auto& p : m) {
arr[p.second]++;
}
int ans = 0;
while (true) {
if (arr[3] > 0) {
if (arr[2] <= arr[3]) {
ans += arr[2];
arr[3] -= arr[2];
arr[2] = 0;
} else {
ans += arr[3];
arr[2] -= arr[3];
arr[3] = 0;
}
}
if (arr[3] > 0) {
if (arr[4] > 0) {
if (arr[3] % 2 == 1) {
arr[2]++;
arr[3]--;
arr[4]--;
ans++;
}
if (2 * arr[4] <= arr[3]) {
ans += 2 * arr[4];
arr[3] -= 2 * arr[4];
arr[4] = 0;
} else {
ans += arr[3];
arr[4] -= arr[3] / 2;
arr[3] = 0;
}
}
}
if (arr[4] > 0) {
arr[4]--;
arr[3]++;
} else {
if (arr[3] == 0) {
break;
} else {
arr[3]--;
arr[2]++;
}
}
}
std::cout << ans << '\n';
return 0;
}