선물 보내기

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

요약
N개의 선물을 두 사람에게 나눠 보낼 때, 같은 사람, 서로 다른 사람, 같은 사람이라는 M개의 조건을 모두 만족하는 경우의 수를 센다.
난이도

어려움10점 중 8점

유형
유니온 파인드, 그래프, 조합론
정답자
아직 제출이 없습니다

문제

달구는 지난 2023년과 2024년에 열린 UDPC를 성공적으로 개최한 기념으로 윤이와 포닉스에게 보낼 자그마한 선물을 준비했다. 달구가 준비한 선물은 총 NN개이고, 각 선물은 11번부터 NN번까지의 번호가 붙어 있다.

달구는 준비한 모든 선물을 유니 또는 포닉스에게 보내려고 한다. 그러나 달구는 어떤 선물을 윤이에게 보낼지, 포닉스에게 보낼지를 아직 정하지 못했다. 달구는 MM개의 조건을 세우고, 이 조건을 모두 만족하는 선에서 윤이와 포닉스에게 선물을 보내려고 한다. 달구가 세운 조건은 아래 세 가지 유형 중 하나이다.

  • aa bb U: aa번 선물과 bb번 선물은 모두 윤이에게 보내야 한다.
  • aa bb D: aa번 선물과 bb번 선물은 윤이와 포닉스에게 각각 하나씩 보내야 한다.
  • aa bb P: aa번 선물과 bb번 선물은 모두 포닉스에게 보내야 한다.

달구가 윤이와 포닉스에게 선물을 보낼 수 있는 서로 다른 방법의 수를 109+710^9 + 7로 나눈 나머지를 구해보자. 어떤 두 방법이 서로 다르다는 것은 두 방법에서 윤이 또는 포닉스가 받을 선물 번호의 집합이 서로 다름을 의미한다. 만약 모든 조건을 만족하도록 각 선물을 윤이 또는 포닉스에게 보낼 수 없는 경우에는 대신 0을 출력한다.

입력

첫째 줄에 달구가 준비한 선물의 수 NN과 선물을 보낼 때 고려해야 할 조건의 수 MM이 공백으로 구분되어 주어진다. (2≤N≤200 000;1≤M≤200 000)(2 \le N \le 200\ 000; 1 \le M \le 200\ 000)

다음 MM개의 줄에는 두 선물의 번호 a_i,b_ia\_i, b\_i와 U, D, P 중 하나의 문자가 공백으로 구분되어 주어진다. (1≤a_i<b_i≤N)(1 \le a\_i < b\_i \le N)

입력에서 주어지는 모든 수는 정수이다.

출력

달구가 윤이와 포닉스에게 선물을 보낼 수 있는 서로 다른 방법의 수를 109+710^9 + 7로 나눈 나머지를 출력한다. 만약 모든 조건을 만족하도록 각 선물을 윤이 또는 포닉스에게 보낼 수 없는 경우에는 대신 0을 출력한다.

예제4

  1. 예제 1

    입력
    6 3
    1 4 U
    2 5 D
    3 6 P
    
    예상 출력
    2
    
  2. 예제 2

    입력
    9 6
    1 7 D
    6 7 D
    1 6 P
    3 7 U
    2 4 D
    5 8 P
    
    예상 출력
    4
    
  3. 예제 3

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

    입력
    7 7
    1 2 D
    2 3 D
    3 4 U
    4 5 D
    5 6 D
    6 7 D
    1 7 P
    
    예상 출력
    0