Помогите с олимпиадой, пожалуйста
Вы проникли в тестирующую систему своей школы, и теперь вам осталось только узнать пароль отличника Вани, чтобы списать у него решение задачи. Только вот проблема: пароль хранится в захешированном виде.
Алгоритм SHA-57 работает так:
изначально hash равен 0
После этого к хешу добавляются символы пароля слева направо. При добавлении символа chr новое значение hash равняется ((hash × 57) ⊕ ord(chr)) mod (2M)
Здесь ⊕ - побитовое исключающее ИЛИ, mod - операция взятия остатка по модулю, ord(chr) - номер буквы в английском алфавите: ord(a)=1, ord(b)=2, ..., ord(z)=26. В пароле могут быть только маленькие английские буквы.
Вам нужно определить, сколько различных паролей длины n из маленьких английских букв имеют значение хеша h.
Формат входных данных
В единственной строке ввода вам даётся через пробел 3 числа: n, M, h (1 ≤ n ≤ 10, 2 ≤ M ≤ 25, 0 ≤ h < 2M) - длина пароля, число M из функии подсчёта хеша и хеш пароля.
Формат результата
Выведите одно число - количество паролей длины n, которые имеют хеш h.
Примеры
Входные данные
1 3 1
Результат работы
4
Входные данные
3 14 10694
Результат работы
3
Входные данные
3 5 0
Результат работы
547
Примечания
Буквы английского языка по порядку: abcdefghijklmnopqrstuvwxyz
Рассмотрим подсчёт SHA-57 для строки "hse" и M = 14:
Для строки "h": ((0 × 57) ⊕ 8) mod (214) = 8
После добавления "s": ((8 × 57) ⊕ 19) mod (214) = 475
Для итоговой строки "hse": ((475 × 57) ⊕ 5) mod (214) = 10694
Для n = 3, M = 14 хеш 10694 имеют 3 пароля: "cwz", "hse", "rxl". Поэтому ответ во втором примере равен 3.
print("Сам решай эту олимпиаду")