만드는 중입니다

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

강아지

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

요약
n명의 마을 사람이 검사하는 대상을 정한 방향 그래프를 바탕으로, 병든 개의 모든 상태에 대해 첫 사살 날짜와 사살된 개의 총합을 998244353으로 나눈 나머지로 구합니다.
난이도

어려움10점 중 9점

유형
그래프, 조합론, 수학
정답자
아직 제출이 없습니다

문제

어떤 마을에 1,2,…,n1, 2, \ldots, n번으로 번호가 매겨진 주민 nn명이 살고 있다. 각 주민은 개를 한 마리씩 기르며, 그 개는 건강하거나 아프다.

0일차에 한 남자가 마을에 와서 모든 주민에게 불쾌한 사실을 알려준다. 마을에 아픈 개가 적어도 한 마리 있다는 것이다.

tt일차(t≥1t \geq 1)에 각 주민 ii는 Gi,j=1G_{i, j} = 1인 모든 주민 jj의 개를 검사한다. 모든 Gi,jG_{i, j} 값은 미리 주어지며 모든 주민이 알고 있다. 검사한 개마다 주민은 그 개가 건강한지 아픈지 알게 된다.

모든 검사가 끝난 뒤, 주민이 자기 개가 아프다고 결론 내릴 수 있으면 오후에 그 개를 쏜다. 그런 결론에 도달할 수 있는 주민이 둘 이상이면 모두 동시에 쏜다. 모든 주민은 총성을 즉시 듣는다. 그 뒤에는 다음 날이 될 때까지 아무도 개에 대해 아무것도 하지 않는다.

주민들은 위에서 설명한 방식 외에는 어떤 방법으로도 정보를 주고받지 않는다.

  • 어느 날 tt에 총성이 한 번이라도 울리면, 과정은 총살 시각 tt로 끝난다.
  • t<233nt < 233^n이면 과정은 t+1t+1일차에 계속된다.
  • 그렇지 않으면 총살 시각 00으로 끝난다.

개들의 건강 상태가 가능한 2n−12^n-1가지 경우마다 두 값을 기록한다. 총살 시각과 총살된 개의 수다. 기록된 모든 총살 시각의 합과 총살된 개 수의 합을 구하라. 두 값 모두 매우 클 수 있으므로 998 244 353998\,244\,353으로 나눈 나머지를 구하라.

입력

첫째 줄에 정수 nn (1≤n≤30001 \leq n \leq 3000)이 주어진다.

이어지는 nn개 줄의 ii번째 줄에는 공백 없이 이진수 nn자리 Gi,1,Gi,2,…,Gi,nG_{i, 1}, G_{i, 2}, \ldots, G_{i, n}이 주어진다 (Gi,j∈{0,1}G_{i, j} \in \{0, 1\}, Gi,i=0G_{i, i} = 0).

출력

첫째 줄에 두 정수를 출력한다. 기록된 모든 총살 시각의 합과 총살된 개 수의 합을 각각 998 244 353998\,244\,353으로 나눈 나머지다.

힌트

첫 번째 예제에서 가능한 경우는 세 가지다.

  1. 1번 개는 아프고 2번 개는 건강하다. 1번 주민은 자기 개 말고는 아픈 개가 없다는 것을 알 수 있으므로 1일차에 자기 개를 쏜다.
  2. 2번 개는 아프고 1번 개는 건강하다. 1일차에 1번 주민은 자기 개가 아픈지 확신하지 못하므로 아무것도 하지 않는다. 2일차에 2번 주민은 1번 주민이 1일차에 자기 개를 쏘지 않았으므로 자기 개가 아프다는 것을 안다.
  3. 두 개 모두 아프다. 두 번째 경우와 비슷하게 진행된다.

예제2

  1. 예제 1

    입력
    2
    01
    00
    
    예상 출력
    5 3
    
  2. 예제 2

    입력
    2
    01
    10
    
    예상 출력
    4 4