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

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

런 (라지)

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

요약
S의 문자를 재배열해 최대 동일 문자 구간 개수가 S와 같은 서로 다른 문자열 개수를 1000003으로 나눈 나머지를 구합니다.
난이도

어려움10점 중 8점

유형
조합론, 동적 계획법
정답자
아직 제출이 없습니다

문제

소문자 'a'부터 'z'까지로만 이루어진 문자열 SS가 있다. 같은 문자가 연속으로 이어지는 최대 구간을 런(run)이라고 부른다. 예를 들어 "bookkeeper"의 런은 7개다. SS를 재배열해서 얻을 수 있는 서로 다른 문자열 중에서, 런의 개수가 SS와 똑같은 것은 몇 개인가?

두 재배열 aa와 bb는 어떤 위치 ii에서 a[i]≠b[i]a[i] \ne b[i]이면 서로 다르다고 본다.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. 다음 TT개의 줄에는 소문자로만 이루어진 비어 있지 않은 문자열 SS가 한 줄에 하나씩 주어진다.

제한

  • 1≤T≤1001 \le T \le 100
  • SS의 길이는 1 이상 450000 이하다.
  • SS의 런은 100개 이하다.
  • 입력 파일의 크기는 1메가바이트를 넘지 않는다.

출력

각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. xx는 1부터 시작하는 테스트 케이스 번호이고, yy는 런의 개수가 SS와 같은 서로 다른 재배열의 개수를 1000003으로 나눈 나머지다.

예제3

  1. 예제 1

    입력
    2
    aabcd
    bookkeeper
    
    예상 출력
    Case #1: 24
    Case #2: 7200
    
  2. 예제 2

    입력
    1
    a
    
    예상 출력
    Case #1: 1
    
  3. 예제 3

    입력
    6
    aaaa
    ab
    aabb
    abab
    abba
    zzzy
    
    예상 출력
    Case #1: 1
    Case #2: 2
    Case #3: 2
    Case #4: 2
    Case #5: 2
    Case #6: 2