#include <bits/stdc++.h>
#define rep(i,n) for (int i=0;i<(n);i++)
#define rep1(i,n) for (int i=1;i<(n);i++)
using namespace std;
using ll = long long;
using P = pair<int, int>;

int main() {
  int n;
  cin >> n;
  map<int,int> circle;
  vector<int> f(n);
  rep(i,n){
    cin >> f[i];
  }
  int cnt = 0;
  rep(i,n){
    map<int,int> m;
    int x = f[i] - 1;
    while(1){
      if(m[x] > 0){
        cnt++;
        break;
      }
      if(circle[x] > 0){
        break;
      }
      
      // if(m[x] > 0){
      //   cnt++;
      //   while(1){
      //     if(circle[x]>0){
      //       break;
      //     }
      //     circle[x]++;
      //     x = f[x] - 1;
      //   }
      //   break;
      // }
      m[x]++;
      circle[x]++;
      x = f[x] - 1;
    }
  }
  ll ans = 1;
  
  rep(i,cnt){
    ans *= 2;
    ans %= 998244353;
  }
  
  cout << (ans - 1) % 998244353 << endl;
  return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int P=998244353;
vector<int> e[200050];
int n,ans=1;
bool v[200050];

void dfs(int u) {
	v[u]=1;
	for (int i=0; i<e[u].size(); ++i)
		if (!v[e[u][i]]) dfs(e[u][i]);
}

int main() {
	scanf("%d",&n);
	for (int i=1,u; i<=n; ++i) {
		scanf("%d",&u);
		e[u].push_back(i);
		e[i].push_back(u);
	}
	for (int i=1; i<=n; ++i)
		if (!v[i]) dfs(i),ans=ans*2%P;
	cout<<(ans+P-1)%P;
}