const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
// 获取4种类型的数量方法
function getCount(map, type) {
if (!map.get(type)) {
map.set(type, 1);
} else {
map.set(type, map.get(type) + 1);
}
}
// Write your code here
while ((line = await readline())) {
const len = line.length;
let map = new Map();
// 注意赋初始值
map.set("String", 0);
map.set("Blank", 0);
map.set("Number", 0);
map.set("Other", 0);
for (let i = 0; i < len; i++) {
// 注意 isNaN(' ') == false
if (isNaN(line[i]) || line[i] == " ") {
// 英文字符
if (/[a-z|A-Z]/.test(line[i])) {
getCount(map, "String");
} else if (/\s/.test(line[i])) {
// 空格字符
getCount(map, "Blank");
} else {
getCount(map, "Other");
}
} else {
// 数字
getCount(map, "Number");
}
}
// 注意换行写法
console.log(
map.get("String")+'\n'+
map.get("Blank")+'\n'+
map.get("Number")+'\n'+
map.get("Other")
);
}
})();