만드는 중입니다

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

좋은 케이블 관리

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

요약
길이 업그레이드와 병렬 업그레이드를 거친 뒤 방향 경로로 서로 통신할 수 있는 질의 쌍의 개수를 구합니다.
난이도

어려움10점 중 9점

유형
트리, 그래프, DFS
정답자
아직 제출이 없습니다

문제

시간 제한: 5000 ms. 메모리 제한: 512 MB.

클라라는 케이블이 심하게 엉켜 버렸다. 케이블과 스위치박스를 대량으로 싸게 샀는데, 그때부터 문제가 시작되었다. 각 스위치박스에는 들어오는 커넥터와 나가는 커넥터가 있다. 케이블은 한 스위치박스의 나가는 커넥터와 다른 스위치박스의 들어오는 커넥터를 잇는다. 통신은 한 방향으로만 된다. 신호는 스위치박스의 나가는 커넥터에서 출발해 케이블을 지나, 상대 스위치박스의 들어오는 커넥터로 들어간다.

처음에 클라라의 네트워크는 스위치박스 하나뿐이다. 이후 클라라는 케이블과 스위치박스를 추가하는 두 종류의 업그레이드로 네트워크를 늘렸다.

  • 길이 업그레이드(스위치박스 x): 기존 스위치박스 x를 고른다. x의 나가는 케이블을 모두 뽑아 새 스위치박스 y의 나가는 커넥터에 다시 꽂는다. 그다음 x의 나가는 커넥터에서 y의 들어오는 커넥터로 새 케이블을 잇는다.

  • 병렬 업그레이드(스위치박스 x): 새 스위치박스 y를 놓고 기존 스위치박스 x를 복제한다. x에 연결된 상대(들어오는 쪽이든 나가는 쪽이든)가 있으면 y도 그 상대와 연결한다. x와 y 사이에는 케이블을 잇지 않는다.

네트워크가 너무 커져서 어느 스위치박스끼리 통신할 수 있는지 알아보기 어려워졌다. 두 스위치박스는 한쪽에서 다른 쪽으로 가는 방향 경로가 있으면 통신할 수 있다. 어느 방향이든 상관없다. 클라라를 도와 질의한 두 스위치박스가 통신할 수 있는 질의의 개수를 세어 보자.

입력

첫 줄에 업그레이드 개수 NN(1≤N≤200 0001 \le N \le 200\,000)과 질의 개수 QQ(1≤Q≤200 0001 \le Q \le 200\,000)가 공백으로 구분되어 주어진다.

다음 NN개 줄에는 업그레이드가 한 줄에 하나씩 주어진다. 각 줄은 길이 업그레이드를 뜻하는 L 또는 병렬 업그레이드를 뜻하는 P로 시작하고, 이어서 업그레이드할 스위치박스 번호 xx(1≤x≤N1 \le x \le N)가 나온다. 스위치박스 xx는 업그레이드하기 전에 이미 네트워크에 있었다. 새로 추가되는 스위치박스 번호 yy는 아직 쓰이지 않은 가장 작은 양의 정수이므로 항상 x<yx < y이다. 처음 스위치박스 번호는 1이다.

다음 QQ개 줄에는 질의의 두 스위치박스 번호 uu, vv(1≤u<v≤N+11 \le u < v \le N + 1)가 한 줄에 하나씩 주어진다.

출력

통신할 수 있는 두 스위치박스를 가진 질의의 개수를 출력한다.

힌트

왼쪽 그림은 입력 예제 1의 업그레이드를 적용한 결과 네트워크이다. 오른쪽 그림은 입력 예제 2의 결과를 보여준다.

예제2

  1. 예제 1

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

    입력
    4 2
    P 1
    L 2
    L 3
    P 3
    1 5
    3 5
    
    예상 출력
    0