추이 폐포

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

문제

방향 그래프 G=(V,E)G = (V, E)가 주어진다. GG추이 폐포(transitive closure) 는 원소가 00 또는 11V×V|V| \times |V| 크기의 행렬 RR로 나타낼 수 있다. 두 정점 AA, BB에 대해 AA에서 BB로 가는 경로가 존재하면 RRAABB열 값을 11로, 존재하지 않으면 00으로 채운다.

행렬 RR 자체는 매우 커질 수 있으므로, 서로 다른 두 정점 XYX \ne Y에 대해 XX에서 YY로 가는 경로가 존재하는 순서쌍 (X,Y)(X, Y)의 개수만 출력한다. 즉, 행렬 RR에서 행과 열이 서로 다른(행 \ne 열) 칸 중 값이 11인 칸의 개수를 구하는 것이다.

경로는 간선을 한 개 이상 지나야 하며, 자기 자신으로 돌아오는 경우(X=YX = Y)는 세지 않는다.

입력

첫 줄에 테스트 케이스의 개수 TT (T10T \le 10)가 주어진다.

각 테스트 케이스의 첫 줄에는 정점의 수 NN과 간선의 수 MM이 주어진다 (2N2,5002 \le N \le 2{,}500, 1M10,0001 \le M \le 10{,}000). 이어지는 MM개의 줄에는 각각 두 정수 AA, BB (1A,BN1 \le A, B \le N)가 주어지며, 이는 AA에서 BB로 가는 방향 간선이 존재함을 뜻한다. 같은 간선이 두 번 이상 주어지지는 않는다.

출력

각 테스트 케이스마다 XYX \ne Y이면서 XX에서 YY로 가는 경로가 존재하는 순서쌍 (X,Y)(X, Y)의 개수를 한 줄에 출력한다.

힌트

첫 번째 테스트 케이스의 첫 번째 그래프(N=3N = 3, 간선 121 \to 2232 \to 3)에서, GG의 추이 폐포 행렬 RR은 다음과 같다.

0 1 1
0 0 1
0 0 0

이 행렬에서 행과 열이 서로 다른(행 \ne 열) 칸 중 값이 11인 칸은 33개이므로 답은 33이다.