만드는 중입니다

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

놀이공원

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

요약
놀이기구 18개 이하의 그래프에서 슬라이드 방향을 일부 뒤집어 사이클이 없게 만드는 방법들의 뒤집은 슬라이드 수를 모두 더한 값을 998244353으로 나눈 나머지를 구합니다.
난이도

어려움10점 중 8점

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

문제

새 놀이공원의 프로젝트를 감독하는 일을 맡았다. 이 놀이공원에는 특별한 장치가 있다. 손님을 한 놀이기구에서 다른 놀이기구로 빠르고 재미있게 옮겨 줄 수 있는 방향이 있는 미끄럼틀이다.

공원 소유주가 현재 프로젝트를 넘겼다. 계획된 놀이기구 목록과 그 사이에 지어야 할 미끄럼틀 목록이다. 그런데 소유주는 사업가라서 불가능한 것도 구상했다. 예를 들어 귀신의 성에서 롤러코스터로, 롤러코스터에서 낙하탑으로, 낙하탑에서 다시 귀신의 성으로 가는 미끄럼틀을 계획했다. 미끄럼틀은 아래로만 내려갈 수 있으므로 이것은 문제가 된다. 공원을 지을 때 물리 법칙을 무시할 수 없으니 프로젝트 변경을 요청해야 한다. 낙하탑과 귀신의 성 사이 미끄럼틀의 방향을 뒤집는 것은 받아들여 줄지도 모른다.

형식적으로 정리하면 다음과 같다.

  • 프로젝트는 놀이기구 목록과 방향이 있는 미끄럼틀 목록이다. 각 미끄럼틀은 한 놀이기구에서 시작해 다른 놀이기구에서 끝난다.
  • 제안은 프로젝트에서 일부 미끄럼틀(하나도 뒤집지 않거나 전부 뒤집는 경우 포함)의 방향을 뒤집어 얻는다.
  • 제안은 모든 미끄럼틀이 아래로 내려가도록 각 놀이기구에 높이를 줄 수 있으면 적법하다.
  • 제안의 비용은 방향을 뒤집은 미끄럼틀의 수다.

주어진 프로젝트에 대해 모든 적법한 제안의 비용 합을 구하라. 이 값은 998,244,353으로 나눈 나머지를 출력한다.

입력

첫 줄에 두 정수 n, m이 주어진다 (1 ≤ n ≤ 18, 0 ≤ m ≤ n(n − 1)/2). n은 놀이기구의 수, m은 미끄럼틀의 수다. 놀이기구에는 1부터 n까지 번호가 매겨진다.

이어서 m개의 줄이 주어진다. i번째 줄에는 두 정수 a_i, b_i (1 ≤ a_i, b_i ≤ n)가 주어지며, a_i에서 b_i로 가는 미끄럼틀을 뜻한다. 다음을 가정해도 된다.

  • 자기 자신으로 가는 미끄럼틀은 없다. 모든 i에 대해 a_i ≠ b_i이다.
  • 같은 미끄럼틀은 두 번 나오지 않는다. i ≠ j이면 a_i ≠ a_j 또는 b_i ≠ b_j이다.
  • 두 놀이기구가 양방향으로 연결되지 않는다. 순서를 무시한 쌍 {a_i, b_i}는 모두 다르다.

출력

모든 적법한 제안의 비용 합을 998,244,353으로 나눈 나머지를 한 줄에 정수 하나로 출력한다.

힌트

첫 번째 예시에는 제안이 두 개 있다. 미끄럼틀 방향을 뒤집지 않으면 비용은 0이고, 뒤집으면 비용은 1이다. 둘 다 적법하므로 답은 0 + 1 = 1이다.

두 번째 예시에는 제안이 여덟 개 있다. 제안 1 → 2, 2 → 3, 3 → 1은 미끄럼틀 열 1 → 2 → 3 → 1 때문에 놀이기구 1이 자기 자신보다 높아야 하므로 적법하지 않다. 제안 2 → 1, 3 → 2, 1 → 3도 같은 이유로 적법하지 않다. 나머지 여섯 개는 적법하며 비용은 0, 1, 2, 1, 2, 3이다. 답은 0 + 1 + 2 + 1 + 2 + 3 = 9이다.

예제2

  1. 예제 1

    입력
    2 1
    1 2
    
    예상 출력
    1
    
  2. 예제 2

    입력
    3 3
    1 2
    2 3
    1 3
    
    예상 출력
    9