Module: 해시


Problem

2 /2


해시시

Theory Click to read/hide

문자열 해싱은 문자열을 각 문자열에 대해 고유한 숫자(충돌 가능성은 무시할 수 있다고 가정함)로 표현하는 것입니다. 이를 통해 중요한 데이터(암호와 같은)를 문자열이 아닌 숫자로 데이터베이스에 저장할 수 있습니다. 이렇게 하면 공격자가 암호 데이터베이스에 대한 액세스 권한을 얻은 경우 암호를 보호할 수 있습니다. 암호 자체는 얻지 못하고 숫자 표현만 얻을 수 있으며 해시로 문자열을 얻는 것은 거의 불가능합니다(특히 해싱 알고리즘을 알지 못하는 경우). ). 
다항식 해시는 프로그래밍 경쟁 문제에서 가장 자주 사용됩니다.
문자열 S의 해시 함수를 결정하는 가장 좋은 방법 중 하나는 다음과 같습니다.
h(S)  =  S[0]  +  S[1] * P  +  S[2] * P^2  +  S[3] * P^3  +  ...  +  S[N] * P^N

Problem

프로그래머 Vasya는 운이 좋지 않았습니다. 휴가 대신 과학 회의 출장을 보냈습니다. "우리는 지식 수준을 높일 필요가 있습니다." 상사가 말했습니다. "암호화에 관한 중요한 회의가 프랑스에서 열리고 있습니다. 그곳에서 그들은 Richelieu 시대에 다시 암호화하고 Vieta 시대에 다른 사람들의 암호를 해독했습니다."
Vasya는 이미 루브르 박물관의 모든 그림을 어딘가에서 본 적이 있다는 사실을 금방 알게 되었고, 쥐가 깔개에서 에펠탑을 닦아내기도 전에 에펠탑의 광경이 지루해졌습니다. 의문의 맛집. 한마디로 파리에는 볼 것이 없었고 낚시할 곳도 없었기 때문에 Vasya는 회의 보고서에 참석해야 했습니다.
연사 중 한 명이 다시 한 번 베이컨의 암호를 풀려고 시도하면서 베이컨 작품의 가능한 모든 하위 문자열을 분석하여 베이컨의 미스터리에 대한 열쇠를 찾을 수 있다는 가설을 제시했습니다. "하지만 너무 많아요!" Vasya는 큰 소리로 놀랐습니다. "아니, 별로!" - 스피커가 외쳤습니다. - "계산해 보세요. 직접 확인하실 수 있습니다!"
같은 날 저녁, Vasya는 인터넷에서 Bacon의 전집을 발견했습니다. 그는 텍스트에서 모든 공백과 문장 부호를 제거하여 텍스트를 하나의 긴 줄로 변환하는 프로그램을 작성했습니다. 그리고 이제 Vasya는 이 문자열의 서로 다른 하위 문자열의 수를 어떻게 세어야 할지 매우 당황합니다. 

입력
입력에 Vasya가 수신한 비어 있지 않은 문자열이 포함되어 있습니다. 문자열은 소문자 라틴 문자로만 구성됩니다. 길이는 2000자를 초과하지 않습니다. 
<사업부>
출력
이 문자열의 서로 다른 하위 문자열의 수를 인쇄합니다.

 

<헤드> <일># <몸>
입력 출력
1 아바 8