"""
Задание 3.
Определить количество различных подстрок с использованием хеш-функции.
Дана строка S длиной N, состоящая только из строчных латинских букв.
Подсказка: примените хеши и множества
рара:
рар
ра
ар
ара
р
а
"""
import hashlib

'''
Сохраняем хэши всех подстрок в множество.
Экономия на размере хранимых данных (для длинных строк) и
скорость доступа вместе с уникальностью элементов,
которые даёт множество, сделают решение коротким и эффективным.
'''

# Вариат 1
s = input("Введите строку из маленьких латинских букв: ")
r = set()

N = len(s)
for i in range(N):
    if i == 0:
        N = len(s) - 1
    else:
        N = len(s)
    for j in range(N, i, -1):
        print(s[i:j])
        '''
        возвращается как строковый объект двойной длины, содержащий только
        шестнадцатеричные цифры. Это может использоваться для безопасного
        обмена значениями в электронной почте или других недвоичных средах.
        digest() - набор байтов
        hexdigest() - строка
        '''
        r.add(hashlib.sha1(s[i:j].encode('utf-8')).hexdigest())
print(r)

print("Количество различных подстрок в строке '%s' равно %d" % (s, len(r)))
