로펭씰~~ 달링씰~~
시간 제한2초메모리 제한1024 MB
카드마다 공정한 동전으로 1 또는 소인수 거듭제곱 곱이 보일 때, 보이는 수들의 최소공배수 기댓값을 998244353으로 나눈 나머지를 구한다.
문제
당신은 세계 최고의 포커 대회 World Of Legends - High-stakes Yearly All-in No-limit GamblingWOLHYANG에서 우승을 차지했고, 이제 남은 일은 상금을 수령하는 것뿐이다! 하지만 세계 최고의 포커 대회답게 상금을 수령하는 과정조차 쉽지 않다. 상금은 다음과 같은 방식으로 결정된다.
-
책상 위에 개의 카드가 일렬로 놓여 있다.
-
번째 카드의 앞면에는 , 뒷면에는 가 적혀 있으며, 모든 카드는 처음에 앞면이 보이도록 놓여 있다.
-
사회자는 동전 던지기를 번 진행한다.
- 번째로 동전을 던졌을 때 뒷면이 나오면 사회자는 번째 카드를 뒷면이 보이도록 뒤집는다.
- 각 동전 던지기에서 앞면이 나올 확률과 뒷면이 나올 확률은 각각 로 동일하다.
-
번의 동전 던지기가 모두 끝난 후, 보이는 면에 적힌 숫자들의 최소공배수만큼의 원화를 받을 수 있다.
똑똑한 당신은 문득 궁금해졌다. 당신이 받을 원화의 기댓값은 얼마일까?
입력
첫째 줄에 카드의 개수 이 주어진다.
둘째 줄에 와 가 공백으로 구분되어 주어진다. 는 서로소
셋째 줄에 이 공백으로 구분되어 주어진다.
넷째 줄에 이 공백으로 구분되어 주어진다.
입력으로 주어지는 모든 수는 정수이다.
출력
당신이 받을 원화의 기댓값을 으로 나눈 나머지를 출력하여라.
힌트
유리수를 기약분수로 나타냈을 때 인 경우, 이 수를 소수인 로 나눈 나머지는 을 만족하는 이상 미만의 정수 이며, 가 의 배수가 아닌 경우 이 값은 유일하다.
이 문제에서 당신이 받을 원화의 기댓값은 유리수이며, 분모가 의 배수가 아님을 증명할 수 있다. 또한, 은 소수이다.