알파벳 문자열

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

요약
대문자 문자열의 모든 부분 문자열에서 등장하는 문자를 중복 없이 정렬해 만든 서로 다른 문자열의 개수를 센다.
난이도

보통10점 중 7점

유형
문자열, 해시맵, 조합론, 투 포인터
정답자
아직 제출이 없습니다

문제

알파벳 대문자로만 이루어진 문자열 SS가 있고, 길이는 NN이다. S[i]S[i]는 SS의 ii번째 문자를, S[i:j]S[i:j]는 S[i],S[i+1],…,S[j−1],S[j]S[i], S[i+1], \ldots, S[j-1], S[j]에 해당하는 SS의 부분 문자열을 나타낸다. 이 문제에서 문자열의 인덱스는 1부터 시작한다.

U(i,j)U(i, j)는 S[i:j]S[i:j]에 나타나는 알파벳을 순서대로 정렬한 문자열이며, 중복해서 나타나는 알파벳은 제외한다.

예를 들어 S="ABCBA"S = \text{"ABCBA"}인 경우 U(1,3)="ABC"U(1, 3) = \text{"ABC"}, U(2,4)="BC"U(2, 4) = \text{"BC"}, U(1,5)="ABC"U(1, 5) = \text{"ABC"}이다.

모든 1≤i≤j≤N1 \le i \le j \le N에 대하여 U(i,j)U(i, j)를 구했을 때, 이 문자열 중에서 서로 다른 문자열이 모두 몇 개인지 구해보자.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 문자열 SS가 주어진다.

출력

각 테스트 케이스에 대해서 U(i,j)U(i, j)에 서로 다른 문자열이 몇 개 있는지 출력한다.

제한

  • 1≤T≤101 \le T \le 10
  • 1≤N≤100,0001 \le N \le 100,000

힌트

두 번째 예제의 경우 A, B, C, AB, BC, ABC 총 여섯 개의 문자열이 존재한다.

세 번째 예제의 경우 A, B, AB 총 세 개의 문자열이 존재한다.

예제1

  1. 예제 1

    입력
    4
    AAA
    ABCBA
    ABABAB
    ABCXYZABC
    
    예상 출력
    1
    6
    3
    30