만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

서로 다른 부분 수열의 개수

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

요약
주어진 문자열의 서로 다른 부분 수열의 개수를 빈 문자열까지 포함해 구한다. 테스트는 10,000개까지 주어진다.
난이도

보통10점 중 6점

유형
동적 계획법, 문자열, 수학
정답자
아직 제출이 없습니다

문제

문자열 S=S1S2⋯SNS = S_1S_2\cdots S_N이 있다. 0≤k≤N0 \le k \le N이고 1≤i1<i2<⋯<ik≤N1 \le i_1 < i_2 < \cdots < i_k \le N일 때 Si1Si2⋯SikS_{i_1}S_{i_2}\cdots S_{i_k}로 만들 수 있는 모든 문자열을 SS의 부분 수열이라고 한다. 길이가 0인 빈 문자열도 SS의 부분 수열이다. 예를 들어 문자열 ioi의 서로 다른 부분 수열은 빈 문자열, i, o, ii, io, oi, ioi로 모두 7개다.

문자열 SS가 주어질 때, SS의 서로 다른 부분 수열의 개수를 구하시오.

입력

첫째 줄에 테스트 케이스의 개수 TT (1≤T≤10 0001 \le T \le 10\,000)가 주어진다. 둘째 줄부터 TT개의 줄에 걸쳐 한 줄에 하나씩 문자열 SS가 주어진다. SS는 영어 알파벳 대문자, 소문자와 숫자(0부터 9까지)로만 이루어져 있고, 길이는 1 이상 1,000 이하이다. 대문자와 소문자는 서로 다른 문자로 취급한다.

출력

각 테스트 케이스마다 주어진 문자열 SS의 서로 다른 부분 수열의 개수를 한 줄에 하나씩 출력한다. 빈 문자열도 개수에 포함한다. 입력으로는 답이 항상 101810^{18} 이하인 문자열만 주어진다.

예제1

  1. 예제 1

    입력
    5
    ioi
    Mmmmm
    ERRATA
    0000FF
    R3GuLaM1N
    
    예상 출력
    7
    10
    42
    15
    512