CHAIN - Strange Food Chain

There are 3 kinds of animals A, B and C. A can eat B, B can eat C, C can eat A. It's interesting, isn't it?

Now we have n animals, numbered from 1 to n. Each of them is one of the 3 kinds of animals: A, B, C.

Today Mary tells us k pieces of information about these n animals. Each piece has one of the two forms below:

  • 1 x y: It tells us the kind of x and y are the same.
  • 2 x y: It tells us x can eat y.

Some of these k pieces are true, some are false. The piece is false if it satisfies one of the 3 conditions below, otherwise it's true.

  • X or Y in this piece is larger than n.
  • This piece tells us X can eat X.
  • This piece conflicts to some true piece before.

Input

The first line contains a single integer t. t blocks follow.

For every block, the first line contains two integers n (1 <= n <= 50000) and k (1 <= k <= 100000). k lines follow, each contains 3 positive integers D (1 <= D <= 2), X, Y, separated by single spaces.

Output

Output t lines, each contains a single integer - the number of false pieces in the corresponding block.

Example

Input:
1
100 7
1 101 1
2 1 2
2 2 3
2 3 3
1 1 3
2 3 1
1 5 5

Output:
3

Hint

The false pieces are the 1st, the 4th and the 5th ones.

Warning: large Input/Output data, be careful with certain languages.

Added by:Fudan University Problem Setters
Date:2007-03-31
Time limit:1s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:All except: C99 ERL JS-RHINO
Resource:Chinese National Olympiad in Informatics 2001,Day 1; translated by Blue Mary

hide comments
2016-01-07 06:28:50 ravi
nice problem ):))
2015-05-07 09:34:50 mkrjn99
Best question on union-find!
2014-09-06 19:00:58 Eric
why the sentence 5 is false??
2010-07-26 06:59:12 :D
Difference between scanf and my fast reading is 0.6s on this problem, so a lot of time is wasted on input reading. Still, with the proper algorithm in C++ you should have no problem with AC. In my case it was 0.7s, where the actual algo took under 0.1s.

P.S. In both cases I was reading the type of operation as char, not int. That probably also made some difference.

Last edit: 2010-07-26 07:02:03
2009-06-29 20:56:18 Przemys³aw Pietrzkiewicz
IMHO time limit is too strict.
© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.