''' Пример  8.5. Все пятибуквенные слова, составленные из букв А, Н, О,
С, записаны в алфавитном порядке и пронумерованы начиная с 1. Вот начало
списка:

0123
АНОС

№  слово   N_4     N_10
1. ААААА  00000     0
2. ААААН  00001     1
3. ААААО  00002     2
4. ААААС  00003     3
5. АААНА  00010     4
…
X. АНОНС  01213_4   103
Y. СОСНА  32310_4   32310

№ п.п. = N_10 + 1


10 <- номера разрядов
10_4 = 1*4 + 0 = 4

3210 <- номера разрядов
1213_4 = 1*4**3 + 2*4**2 + 1*4 + 3 = 64 + 32 + 4 + 3 = 103
43210
32310_4 = 3*4**4 + 2*4**3 + 3*4**2 + 1*4 = 3*256 + 128 + 48 + 4  = 948

>>> int('1213', 4)
103 <- позиция слова АНОНС
>>> int('32310', 4)
948 <- позиция слова СОСНА

[103, 948]

Количество целых точек на [a; b]
k = b - a + 1

Какое количество слов находится между словами АНОНС и СОСНА (включая эти
слова)?

Ответ: 948 - 103 + 1 = 846

'''

from itertools import product

abc = sorted('АНОС')
t = [''.join(w) for w in product(abc, repeat=5)]

# I способ 
print(t.index('СОСНА') - t.index('АНОНС') + 1)  # 846

# II способ
num = 0
for w in t:
    num += 1
    if w == 'АНОНС':
        numA = num
    elif w == 'СОСНА':
        numS = num
        break

print(numS - numA + 1)  # 846 ok



