=====Problem Statement=====
You are given n words. Some words may repeat. For each word, output its number of occurrences. The output order should correspond with the input order of appearance of the word. See the sample input/output for clarification.

Note: Each input line ends with a "\n" character.

=====Constraints=====
1≤n≤10^5
The sum of the lengths of all the words do not exceed 10^6
All the words are composed of lowercase English letters only.

=====Input Format=====
The first line contains the integer, n.
The next n lines each contain a word.

=====Output Format=====
Output 2 lines.
On the first line, output the number of distinct words from the input.
On the second line, output the number of occurrences for each distinct word according to their appearance in the input.

Difficulty: introductory

Starter code:

# Enter your code here. Read input from STDIN. Print output to STDOUT

Solutions:
from collections import Counter, OrderedDict
class OrderedCounter(Counter,OrderedDict):
    pass

word_ar = []
n = int(input())
for i in range(n):
    word_ar.append(input().strip())
word_counter = OrderedCounter(word_ar)
print(len(word_counter))
for word in word_counter:
    print(word_counter[word],end=' ')


#!/usr/bin/env python3

from collections import OrderedDict

def __starting_point():
    num = int(input().strip())
    history = OrderedDict()
    
    for _ in range(num):
        word = str(input().strip().split())
        if word not in list(history.keys()):
            history[word] = 1
        else:
            history[word] += 1
            
    print((len(list(history.keys()))))
    print((" ".join(map(str, list(history.values())))))

__starting_point()