아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

서로 다른 부분 문자열

시간 제한3초메모리 제한512 MB

요약
문자열 p를 반복해 길이 n으로 자른 문자열에서 서로 다른 부분 문자열의 수를 구합니다. n은 10^9까지 가능합니다.
난이도

어려움10점 중 8점

유형
문자열 매칭, 수학, 문자열
정답자
아직 제출이 없습니다

문제

Diana는 이상한 웹사이트에서 Long Random String Generator를 하나 샀다. 길이 nn의 긴 문자열 ss를 생성한 뒤, 그 연속 부분 문자열을 다른 이상한 웹사이트의 비밀번호로 쓰려고 했다.

그런데 곧 길이 nn의 생성된 문자열 ss가 전혀 무작위가 아니라, 길이 kk의 문자열 pp를 여러 번 반복한 뒤 길이 nn에서 자른 것이라는 사실을 알게 되었다. 즉, 0≤i≤n−10 \le i \le n-1인 모든 ii에 대해 s[i]=p[i mod k]s[i] = p[i \bmod k]이다.

Diana는 생성된 문자열에서 서로 다른 비밀번호를 몇 개나 얻을 수 있는지 궁금해한다. 문자열 ss에 있는 서로 다른 비어 있지 않은 부분 문자열의 개수를 구하자.

입력

첫 번째 줄에는 kk개의 소문자 영어 알파벳으로 이루어진 문자열 pp가 주어진다. (1≤k≤10001 \le k \le 1000)

두 번째 줄에는 정수 nn이 주어진다. (k≤n≤109k \le n \le 10^9)

출력

ss에 있는 서로 다른 비어 있지 않은 부분 문자열의 개수를 출력한다.

힌트

첫 번째 예제에서 생성된 문자열은 abbaabb이다. 여기에는 서로 다른 비어 있지 않은 부분 문자열이 20개 있다. a, b, aa, ab, ba, bb, aab, abb, baa, bba, aabb, abba, baab, bbaa, abbaa, baabb, bbaab, abbaab, bbaabb, abbaabb.

예제2

  1. 예제 1

    입력
    abba
    7
    
    예상 출력
    20
    
  2. 예제 2

    입력
    a
    42
    
    예상 출력
    42