

- 위의 그림과 같이 graph가 형성되어 있는 경우, 연결 요소가 2개 있다고 함
 
- for문을 통해 N만큼의 시작 node들을 순회하면서 그 결과값을 set형식으로 check list에 저장해둠
 
- len(check)이 연결 요소의 개수가 됨
 
import sys
from collections import deque
tmp = list(map(int, sys.stdin.readline()[:-1].split(' ')))
N = tmp[0]; M = tmp[1]
adjacent = [[] for _ in range(N+1)]
for _ in range(M):
    t0, t1 = map(int, sys.stdin.readline()[:-1].split(' '))
    adjacent[t0].append(t1)
    adjacent[t1].append(t0)
check = [] 
def bfs(start):
    global check
    visit_b[start] = True
    nodes = deque([start]); tmp = []
    while nodes:
        v = nodes.popleft()
        tmp.append(v)
        for i in range(len(adjacent[v])):
            if not visit_b[adjacent[v][i]]:
                visit_b[adjacent[v][i]] = True
                nodes.append(adjacent[v][i])
    if set(tmp) not in check:
        check.append(set(tmp))
for v in range(1, N+1):
    visit_b = [False] * (N+1)
    bfs(v)
print(len(check))