Prime Arrangement

아직 제출이 없습니다시간 제한1초메모리 제한1024 MB

문제

정수 RR, CC가 주어진다. 이어 R×CR\times C개의 서로 다른 소수 A_iA\_i가 주어진다. 소수는 22 이상이고, 11과 자기 자신으로만 나누어지는 양의 정수를 의미한다.

길이 RR의 순열 PP가 주어진다. 길이 RR의 순열은 11부터 RR까지의 정수가 단 한 번씩만 존재하는 수열이다.

당신은 RRCC열의 2차원 배열에 주어진 소수들을 단 한 번씩만 사용하여 배치할 수 있다. 배열의 각 자리에 최대 하나의 소수만이 들어갈 수 있다.

소수를 배치한 이후에는 각 행마다 가중치를 얻을 것이다. ii번째 행의 가중치는 ii번째 행에 존재하는 모든 소수들을 한 번씩 곱한 값으로 계산된다. (1iR1\leq i \leq R)

당신은 올바른 소수의 배치 중 각 행의 가중치들을 작은 순서대로 나열했을 때, ii번째 행의 가중치가 각각 P_iP\_i번째에 위치하도록 하는 배치의 수를 구해야 한다.

입력

입력은 아래와 같이 주어진다.

RR CC

A_1A\_1 A_2A\_2 ... A_RCA\_{RC}

P_1P\_1 P_2P\_2 ... P_RP\_R

출력

가능한 배치의 수를 998,244,353998\\,244\\,353으로 나눈 나머지를 출력한다. 998,244,353998\\,244\\,353은 소수이다.

제한

  • 1R,C5001 \leq R,C \leq 500
  • 2A_i<1072 \leq A\_i < 10^7
  • A_iA\_i는 소수이다.
  • 1P_iR1 \leq P\_i \leq R