최소 순환 시프트
시간 제한1.5초메모리 제한256 MB
길이가 주어진 무작위 소문자 문자열들에 대해, 답안 순서가 한 칸 밀려 적힌 경우 맞은 개수의 기댓값을 998244353으로 나눈 나머지로 구합니다.
문제
Ani는 젊고 무모한 학생이다. 어느 날 그는 아주 이상한 수학 숙제를 받았다.
숙제에는 길이가 각각 인 문자열 이 개 주어졌다.
는 문자열 의 사전순으로 가장 작은 순환 시프트가 시작하는 위치이다. 그런 위치가 하나가 아닐 수 있으므로, 는 그중 가장 작은 위치로 정의한다. 예를 들어 qweqweqwe에서 사전순으로 가장 작은 순환 시프트는 eqweqweqw이고, 이것이 원래 문자열에서 시작하는 가장 작은 위치는 3번이다. 그 자리에 있는 문자가 e이기 때문이다. 따라서 이다.
숙제는 을 이 순서대로 적는 것이었다. 그런데 Ani는 순서로 답을 적었다. 그는 답을 제출하고 나서야 이를 알아챘다. 지금 그가 기억하는 것은 뿐이다. 문자열은 소문자 영어 알파벳으로만 이루어지며, 선생님이 균등한 확률로 무작위 생성했다고 가정한다. Ani가 맞힌 답의 개수의 기댓값을 998244353으로 나눈 나머지로 구하라.
기댓값은 서로소인 음이 아닌 정수 에 대해 꼴로 나타낼 수 있다. 을 출력한다.
입력
첫 줄에 문자열의 개수 ()이 주어진다.
둘째 줄에는 공백으로 구분된 정수 ()이 주어진다. 각 문자열의 길이이다.
출력
맞힌 답의 개수 기댓값을 998244353으로 나눈 나머지를 한 줄에 출력한다.