#include <iostream>
#include <string>
#include <cctype>
#include <unordered_map>
 
using namespace std;
 
// Fungsi untuk memeriksa apakah sebuah karakter adalah angka
bool isDigit(char c) {
    return c >= '0' && c <= '9';
}
 
// Fungsi untuk memeriksa apakah sebuah karakter adalah huruf kapital
bool isCapital(char c) {
    return c >= 'A' && c <= 'Z';
}
 
// Fungsi utama untuk menghitung atom
unordered_map<char, int> hitungAtom(const string& senyawa) {
    unordered_map<char, int> jumlahAtom;
    int n = senyawa.length();
    int i = 0;
 
    while (i < n) {
        // Cek apakah karakter adalah huruf kapital (awal unsur)
        if (isCapital(senyawa[i])) {
            char unsur = senyawa[i];
            i++;
 
            // Cek apakah ada huruf kecil setelah huruf kapital (misalnya H2O, bukan H2o)
            while (i < n && islower(senyawa[i])) {
                i++; // Abaikan huruf kecil, karena hanya huruf kapital yang mewakili unsur
            }
 
            // Cek apakah ada angka setelah unsur
            int jumlah = 0;
            if (i < n && isDigit(senyawa[i])) {
                while (i < n && isDigit(senyawa[i])) {
                    jumlah = jumlah * 10 + (senyawa[i] - '0');
                    i++;
                }
            } else {
                jumlah = 1; // Jika tidak ada angka, berarti hanya ada 1 atom
            }
 
            jumlahAtom[unsur] += jumlah;
        } else {
            i++; // Abaikan karakter yang tidak dikenali
        }
    }
    return jumlahAtom;
}
 
int main() {
    string rumus;
 
    cout << "Masukkan rumus kimia (contoh: H2O, C6H12O6): ";
    cin >> rumus;
 
    unordered_map<char, int> hasil = hitungAtom(rumus);
 
    cout << "\nJumlah atom dalam senyawa " << rumus << ":" << endl;
    for (auto const& [unsur, jumlah] : hasil) {
        cout << "  " << unsur << ": " << jumlah << endl;
    }
 
    return 0;
}