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

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

First to Solve

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

요약
문제를 무작위 순서로 푸는 대회에서 각 참가자가 가장 먼저 해결한 문제 수의 기댓값을 998244353으로 나눈 나머지로 구한다.
난이도

어려움10점 중 9점

유형
확률, 조합론, 동적 계획법, 비트 연산
정답자
아직 제출이 없습니다

문제

유명한 Forcedeltas Programming Contest에는 nn명의 참가자, mm개의 문제가 있고, 대회는 kk분 동안 진행된다.

각 참가자 ii와 각 문제 jj에 대해 정수 ai,ja_{i, j}가 주어진다. ai,j=0a_{i, j} = 0이면 참가자 ii는 문제 jj를 풀 수 없다. 그렇지 않으면 참가자 ii는 문제 jj를 정확히 ai,ja_{i, j}분에 풀 수 있다.

모든 참가자는 같은 전략을 따른다. 각 참가자는 자신이 풀 수 있는 모든 문제의 목록을 만들고, 그 목록을 균일하게 무작위로 섞은 뒤, 목록이 끝나거나 대회가 끝날 때까지 그 순서대로 문제를 푼다.

예를 들어, 참가자 ii의 목록이 섞인 뒤 j1,j2,…j_1, j_2, \ldots와 같다면, 참가자는 ai,j1a_{i, j_1}분에 문제 j1j_1을 풀고, ai,j1+ai,j2a_{i, j_1} + a_{i, j_2}분에 문제 j2j_2를 푸는 식이다. 어떤 문제도 k+1k + 1분 이후에는 풀 수 없다.

참가자 ii가 문제 jj를 다른 어떤 참가자보다 엄격하게 늦지 않게 풀면, 참가자 ii가 문제 jj의 First to Solve 상을 받는다고 한다. 즉, 여러 참가자가 같은 문제의 상을 받을 수 있다.

각 참가자가 받을 상의 기댓값을 998 244 353998\,244\,353으로 나눈 나머지로 구하라 (자세한 내용은 출력 부분을 참고하라).

입력

첫째 줄에 세 정수 nn, mm, kk가 주어진다. 이는 참가자의 수, 문제의 수, 대회 시간(분)이다 (1≤n≤5001 \le n \le 500; 1≤m≤261 \le m \le 26; 1≤k≤3001 \le k \le 300).

다음 nn개의 줄 중 ii번째 줄에는 mm개의 정수 ai,1,ai,2,…,ai,ma_{i, 1}, a_{i, 2}, \ldots, a_{i, m}이 주어진다 (0≤ai,j≤k0 \le a_{i, j} \le k). 이 중 jj번째 정수는 참가자 ii가 문제 jj를 푸는 데 필요한 분 수를 나타내며, 참가자 ii가 문제 jj를 풀 수 없으면 00이다.

출력

참가자 1,2,…,n1, 2, \ldots, n이 받을 상의 기댓값을 998 244 353998\,244\,353으로 나눈 나머지로 nn개 출력한다.

형식적으로, M=998 244 353M = 998\,244\,353이라 하자. 상의 기댓값은 기약분수 pq\frac{p}{q}로 나타낼 수 있으며, pp와 qq는 정수이고 q≢0(modM)q \not \equiv 0 \pmod{M}이다. p⋅q−1 mod Mp \cdot q^{-1} \bmod M과 같은 정수를 출력하라. 즉, 0≤x<M0 \le x < M이고 x⋅q≡p(modM)x \cdot q \equiv p \pmod{M}인 정수 xx를 출력하라.

힌트

예제에서 참가자 11은 항상 문제 11의 상을 받고, 참가자 22는 항상 문제 22의 상을 받으며, 참가자 33이 받을 상의 기댓값은 34\frac{3}{4}, 참가자 44는 상을 전혀 받지 못하고, 참가자 55가 받을 상의 기댓값은 12\frac{1}{2}이다.

예제1

  1. 예제 1

    입력
    5 3 60
    30 0 0
    40 20 0
    30 60 0
    0 0 0
    60 60 1
    
    예상 출력
    1
    1
    249561089
    0
    499122177