#!/usr/bin/env python3 # https://cs.stackexchange.com/questions/123381/number-of-connected-induced-subgraph-in-a-tree import sys sys.setrecursionlimit(1000000) BIG = 10**9+7 def dfs(i,vis,A,B,search): vis[i] = True S[i] = search loop = False mult = 0 result = 0 if i in par: # see if any children for j in par[i]: if not vis[j]: result = dfs(j,vis,A,B,search) if result > 0: # backing up from a loop node mult = result else: A[i] = (A[i]+A[j]+B[j])%BIG B[i] = (B[i]*(1+B[j]))%BIG elif S[j] != search: # incorporate j's A,B values into i A[i] = (A[i]+A[j]+B[j])%BIG B[i] = (B[i]*(1+B[j]))%BIG else: # we're the last node in the loop--this can happen only once loop = True if loop: return B[i] else: return (B[i]*mult)%BIG n = int(sys.stdin.readline()) par = {} for i in range(n): x = int(sys.stdin.readline()) if x-1 in par: par[x-1].append(i) else: par[x-1] = [i] vis = [False for i in range(n)] A = [0 for i in range(n)] B = [1 for i in range(n)] S = [0 for i in range(n)] # search number ans = 1 search = 0 for i in range(n): if vis[i]: continue search += 1 ret = dfs(i,vis,A,B,search) if ret > 0: ans = (ans*(ret+1))%BIG print((ans-1+BIG)%BIG)