말하자면 1 -> 3 <-> 3 으로 1에서 시작해도 3이라는 사이클을 발견할 수 있는데, 반드시 사이클에 포함되는 숫자인 3에서 시작할 경우에만 사이클을 찾은 걸로 인정한다는 것이다
# 텀 프로젝트
def dfs(node, visited):
if visited[node]:
return [0]
visited[node] = 1
return dfs(graph[node], visited) + [node]
for tc in range(int(input())):
n = int(input())
graph = [0] + list(map(int, input().split()))
visited = [0]*(n+1)
for i in range(1, n+1):
if not visited[i]:
visit = dfs(graph[i], visited[:])
# print(i, visit)
if visit[1:2] == [i]:
for v in visit[1:]:
visited[v] = 1
print(n-sum(visited))
# 텀 프로젝트
for tc in range(int(input())):
N = int(input())
graph = [0] + list(map(int, input().split()))
visited = [0] * (N+1)
check = 0
for idx in range(1, N+1):
if visited[idx]:
continue
# 이미 방문된 곳이 있다면 탐색 종료
cur = idx
while not visited[cur]:
visited[cur] = idx
cur = graph[cur]
# 이 탐색의 시작 숫자 ~ 사이클의 시작 숫자 사이의 개수 세기
# 만약 시작 숫자 = 사이클의 시작 숫자라면 0개가 된다
next = idx
while next != cur:
check += 1
next = graph[next]
print(check)