#include <bits/stdc++.h>
using namespace std;
 
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
 
    int n;
    cin >> n;
    vector<int> zap(n);
    for (int i = 0; i < n; i++) cin >> zap[i];
    cin.ignore();
 
    string tekst;
    getline(cin, tekst);
 
    int sp = 0, liczb = 0, slow = 0, zda = 0, pal = 0;
 
    for (int i = 0; i < (int)tekst.size(); i++)
        if (tekst[i] == ' ') sp++;
 
    for (int i = 0; i < (int)tekst.size();) {
        if (isdigit(tekst[i])) {
            liczb++;
            while (i < (int)tekst.size() && isdigit(tekst[i])) i++;
        } else i++;
    }
 
    vector<string> wyrazy;
    for (int i = 0; i < (int)tekst.size();) {
        if (isalpha(tekst[i])) {
            string tmp = "";
            while (i < (int)tekst.size() && isalpha(tekst[i])) {
                tmp += tekst[i];
                i++;
            }
            wyrazy.push_back(tmp);
            slow++;
        } else i++;
    }
 
    string cz = "";
    for (int i = 0; i < (int)tekst.size(); i++) {
        char z = tekst[i];
        if (z == '.') {
            int ok = 0;
            for (int j = 0; j < (int)cz.size(); j++)
                if (isalpha(cz[j])) { ok = 1; break; }
            if (ok) zda++;
            cz = "";
        } else cz += z;
    }
 
    for (int i = 0; i < (int)wyrazy.size(); i++) {
        string a = wyrazy[i];
        for (int j = 0; j < (int)a.size(); j++) a[j] = tolower(a[j]);
        string b = a;
        reverse(b.begin(), b.end());
        if (a == b) pal++;
    }
 
    for (int i = 0; i < n; i++) {
        if (zap[i] == 1) cout << sp;
        else if (zap[i] == 2) cout << liczb;
        else if (zap[i] == 3) cout << slow;
        else if (zap[i] == 4) cout << zda;
        else cout << pal;
        cout << " ";
    }
}
 
				I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgogICAgaW50IG47CiAgICBjaW4gPj4gbjsKICAgIHZlY3RvcjxpbnQ+IHphcChuKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSBjaW4gPj4gemFwW2ldOwogICAgY2luLmlnbm9yZSgpOwoKICAgIHN0cmluZyB0ZWtzdDsKICAgIGdldGxpbmUoY2luLCB0ZWtzdCk7CgogICAgaW50IHNwID0gMCwgbGljemIgPSAwLCBzbG93ID0gMCwgemRhID0gMCwgcGFsID0gMDsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IChpbnQpdGVrc3Quc2l6ZSgpOyBpKyspCiAgICAgICAgaWYgKHRla3N0W2ldID09ICcgJykgc3ArKzsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IChpbnQpdGVrc3Quc2l6ZSgpOykgewogICAgICAgIGlmIChpc2RpZ2l0KHRla3N0W2ldKSkgewogICAgICAgICAgICBsaWN6YisrOwogICAgICAgICAgICB3aGlsZSAoaSA8IChpbnQpdGVrc3Quc2l6ZSgpICYmIGlzZGlnaXQodGVrc3RbaV0pKSBpKys7CiAgICAgICAgfSBlbHNlIGkrKzsKICAgIH0KCiAgICB2ZWN0b3I8c3RyaW5nPiB3eXJhenk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IChpbnQpdGVrc3Quc2l6ZSgpOykgewogICAgICAgIGlmIChpc2FscGhhKHRla3N0W2ldKSkgewogICAgICAgICAgICBzdHJpbmcgdG1wID0gIiI7CiAgICAgICAgICAgIHdoaWxlIChpIDwgKGludCl0ZWtzdC5zaXplKCkgJiYgaXNhbHBoYSh0ZWtzdFtpXSkpIHsKICAgICAgICAgICAgICAgIHRtcCArPSB0ZWtzdFtpXTsKICAgICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICB3eXJhenkucHVzaF9iYWNrKHRtcCk7CiAgICAgICAgICAgIHNsb3crKzsKICAgICAgICB9IGVsc2UgaSsrOwogICAgfQoKICAgIHN0cmluZyBjeiA9ICIiOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAoaW50KXRla3N0LnNpemUoKTsgaSsrKSB7CiAgICAgICAgY2hhciB6ID0gdGVrc3RbaV07CiAgICAgICAgaWYgKHogPT0gJy4nKSB7CiAgICAgICAgICAgIGludCBvayA9IDA7CiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgKGludCljei5zaXplKCk7IGorKykKICAgICAgICAgICAgICAgIGlmIChpc2FscGhhKGN6W2pdKSkgeyBvayA9IDE7IGJyZWFrOyB9CiAgICAgICAgICAgIGlmIChvaykgemRhKys7CiAgICAgICAgICAgIGN6ID0gIiI7CiAgICAgICAgfSBlbHNlIGN6ICs9IHo7CiAgICB9CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAoaW50KXd5cmF6eS5zaXplKCk7IGkrKykgewogICAgICAgIHN0cmluZyBhID0gd3lyYXp5W2ldOwogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgKGludClhLnNpemUoKTsgaisrKSBhW2pdID0gdG9sb3dlcihhW2pdKTsKICAgICAgICBzdHJpbmcgYiA9IGE7CiAgICAgICAgcmV2ZXJzZShiLmJlZ2luKCksIGIuZW5kKCkpOwogICAgICAgIGlmIChhID09IGIpIHBhbCsrOwogICAgfQoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgaWYgKHphcFtpXSA9PSAxKSBjb3V0IDw8IHNwOwogICAgICAgIGVsc2UgaWYgKHphcFtpXSA9PSAyKSBjb3V0IDw8IGxpY3piOwogICAgICAgIGVsc2UgaWYgKHphcFtpXSA9PSAzKSBjb3V0IDw8IHNsb3c7CiAgICAgICAgZWxzZSBpZiAoemFwW2ldID09IDQpIGNvdXQgPDwgemRhOwogICAgICAgIGVsc2UgY291dCA8PCBwYWw7CiAgICAgICAgY291dCA8PCAiICI7CiAgICB9Cn0K