OIG XVII - ful

// 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;
}