#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#define MAX_WORDS 1000
#define MAX_WORD_LEN 100
typedef struct {
char word[MAX_WORD_LEN];
int count;
} WordCount;
int find_word(WordCount words[], int word_count, const char *word) {
for (int i = 0; i < word_count; i++) {
if (strcmp(words
[i
].
word, word
) == 0) { return i;
}
}
return -1;
}
int main() {
char text[10000];
WordCount words[MAX_WORDS];
int word_count = 0;
fgets(text
, sizeof(text
), stdin
);
char *token
= strtok(text
, " \t\n\r"); while (token != NULL) {
int index = find_word(words, word_count, token);
if (index >= 0) {
words[index].count++;
} else {
strcpy(words
[word_count
].
word, token
); words[word_count].count = 1;
word_count++;
}
token
= strtok(NULL
, " \t\n\r"); }
for (int i = 0; i < word_count; i++) {
printf("%s: %d\n", words
[i
].
word, words
[i
].
count); }
return 0;
}
CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxjdHlwZS5oPgojaW5jbHVkZSA8c3RkbGliLmg+CgojZGVmaW5lIE1BWF9XT1JEUyAxMDAwCiNkZWZpbmUgTUFYX1dPUkRfTEVOIDEwMAoKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciB3b3JkW01BWF9XT1JEX0xFTl07CiAgICBpbnQgY291bnQ7Cn0gV29yZENvdW50OwoKaW50IGZpbmRfd29yZChXb3JkQ291bnQgd29yZHNbXSwgaW50IHdvcmRfY291bnQsIGNvbnN0IGNoYXIgKndvcmQpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd29yZF9jb3VudDsgaSsrKSB7CiAgICAgICAgaWYgKHN0cmNtcCh3b3Jkc1tpXS53b3JkLCB3b3JkKSA9PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAtMTsKfQoKaW50IG1haW4oKSB7CiAgICBjaGFyIHRleHRbMTAwMDBdOwogICAgV29yZENvdW50IHdvcmRzW01BWF9XT1JEU107CiAgICBpbnQgd29yZF9jb3VudCA9IDA7CgogICAgcHJpbnRmKCLQktCy0LXQtNGW0YLRjCDRgtC10LrRgdGCOlxuIik7CiAgICBmZ2V0cyh0ZXh0LCBzaXplb2YodGV4dCksIHN0ZGluKTsKCiAgICBjaGFyICp0b2tlbiA9IHN0cnRvayh0ZXh0LCAiIFx0XG5cciIpOwogICAgd2hpbGUgKHRva2VuICE9IE5VTEwpIHsKICAgICAgICBpbnQgaW5kZXggPSBmaW5kX3dvcmQod29yZHMsIHdvcmRfY291bnQsIHRva2VuKTsKICAgICAgICBpZiAoaW5kZXggPj0gMCkgewogICAgICAgICAgICB3b3Jkc1tpbmRleF0uY291bnQrKzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdHJjcHkod29yZHNbd29yZF9jb3VudF0ud29yZCwgdG9rZW4pOwogICAgICAgICAgICB3b3Jkc1t3b3JkX2NvdW50XS5jb3VudCA9IDE7CiAgICAgICAgICAgIHdvcmRfY291bnQrKzsKICAgICAgICB9CiAgICAgICAgdG9rZW4gPSBzdHJ0b2soTlVMTCwgIiBcdFxuXHIiKTsKICAgIH0KCiAgICBwcmludGYoIlxu0KfQsNGB0YLQvtGC0LAg0YHQu9GW0LI6XG4iKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd29yZF9jb3VudDsgaSsrKSB7CiAgICAgICAgcHJpbnRmKCIlczogJWRcbiIsIHdvcmRzW2ldLndvcmQsIHdvcmRzW2ldLmNvdW50KTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQo=