만드는 중입니다

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

찻집

시간 제한8초메모리 제한1024 MB

요약
도로를 따라 놓인 n개 찻집의 순서 가운데 m개의 기록을 모두 만족하는 순서의 수를 998244353으로 나눈 나머지로 구합니다.
난이도

보통10점 중 7점

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

문제

옛날 요코하마의 동서로 뻗은 도로 한쪽에 여러 채의 찻집(chaya)이 있었다. 찻집의 총 개수는 알려져 있지만, 각 찻집의 위치 정보는 완전히 유실되었다고 여겨졌다.

최근 요코하마의 옛 도시 풍경을 기록한 문서가 발견되었다. 이 문서에는 찻집의 위치 순서에 관한 기록이 여러 개 담겨 있다. 각 기록은 찻집 세 곳 aa, bb, cc의 위치 순서에 대한 정보를 담고 있으며, 내용은 다음과 같다.

찻집 bb는 찻집 aa와 cc 사이에 있었다. aa와 bb 사이, 또는 bb와 cc 사이에 다른 찻집이 있었을 수 있다. 또한 찻집 aa는 cc의 동쪽에 있었을 수도, 서쪽에 있었을 수도 있다.

발견된 문서의 모든 기록과 일치하는 도로 위 찻집의 순서가 몇 가지인지 구하라. 기록에 오류가 있을 수 있으므로, 기록과 일치하는 순서가 하나도 없을 수도 있다.

입력

입력은 다음 형식으로 주어지는 하나의 테스트 케이스이다.

nn mm

a1a_1 b1b_1 c1c_1

⋮\vdots

ama_m bmb_m cmc_m

여기서 nn은 찻집의 수, mm은 문서에 있는 기록의 수이다. 3≤n≤243 \le n \le 24이고 1≤m≤n×(n−1)×(n−2)/21 \le m \le n \times (n - 1) \times (n - 2)/2이다. 찻집은 1부터 nn까지 번호가 매겨져 있다.

이후 mm개의 줄은 각각 기록 하나를 나타낸다. ii번째 줄에는 1 이상 nn 이하의 서로 다른 정수 aia_i, bib_i, cic_i가 주어진다. 이는 찻집 bib_i가 찻집 aia_i와 cic_i 사이에 있었다는 뜻이다. 서로 다른 두 기록 ii, jj에 대해 (ai,bi,ci)(a_i, b_i, c_i)는 (aj,bj,cj)(a_j, b_j, c_j)나 (cj,bj,aj)(c_j, b_j, a_j)와 같지 않다. 즉, 같은 기록이 중복으로 주어지지 않는다.

출력

기록과 모두 일치하는, 동쪽에서 서쪽 방향의 찻집 순서가 몇 가지인지 998244353998244353으로 나눈 나머지를 한 줄에 출력한다. 998244353=223×7×17+1998244353 = 2^{23} \times 7 \times 17 + 1은 소수이다.

힌트

예제 입력 1에서는 (1,5,3,2,4)(1, 5, 3, 2, 4), (4,2,3,1,5)(4, 2, 3, 1, 5), (4,2,3,5,1)(4, 2, 3, 5, 1), (5,1,3,2,4)(5, 1, 3, 2, 4) 네 가지 순서가 기록과 일치한다.

예제 입력 2에서는 기록과 일치하는 순서가 없다.

예제2

  1. 예제 1

    입력
    5 4
    1 2 4
    2 3 5
    3 2 4
    1 3 2
    
    예상 출력
    4
    
  2. 예제 2

    입력
    4 2
    3 1 4
    1 4 3
    
    예상 출력
    0