#include<bits/stdc++.h>
#define reg register 
typedef long long ll;
using namespace std;
inline int qr(){
	int x=0,f=0;char ch=0;
	while(!isdigit(ch)){f|=ch=='-';ch=getchar();}
	while(isdigit(ch)) {x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
	return f?-x:x;
}
const int maxn=2e5+100;
const int mod=998244353;
int n;
struct node{
	int next,to;
}edge[maxn<<1];
int head[maxn],_tot;
void add(int u,int v){
	edge[_tot].next=head[u],edge[_tot].to=v;head[u]=_tot++;
}
int qkpow(int a,int b){
	ll res=1;
	while(b){
		if(b&1) res=(res*a)%mod;
		a=((ll)a*a)%mod;b>>=1;
	}
	return res;
}
int dfn[maxn],low[maxn],dfncnt;
int cnt;
int st[maxn],top;
bool vis[maxn];
void tarjan(int x){
	low[x]=dfn[x]=++dfncnt;
	st[++top]=x;vis[x]=1;
	for(reg int i=head[x];~i;i=edge[i].next){
		int y=edge[i].to;
		if(!dfn[y]){
			tarjan(y);
			low[x]=min(low[x],low[y]);
		}else if(vis[y]){
			low[x]=min(low[x],dfn[y]);
		}
	}
	if(dfn[x]==low[x]){
		cnt++;int z;
		do{
			z=st[top--];vis[z]=0;
		}while(z!=x);
	}
}
int main(){
	n=qr();
	memset(head,-1,sizeof head);
	for(reg int i=1;i<=n;i++){
		int x=qr();
		add(i,x);add(x,i);
	}	
	for(reg int i=1;i<=n;i++){
		if(!dfn[i]) top=0,tarjan(i);
	}
	printf("%d\n",qkpow(2,cnt)-1);
	return 0;
}
#include <bits/stdc++.h>
using namespace std;
#define _ <<" "<<
#define sz(x) ((int) (x).size())
typedef pair<int, int> pii;
typedef long long ll;
const int maxn = 5e5 + 5;
template<class T> void print(T & x){ cout << x; }
template<class T,class U> void print(pair<T,U> & p){cout << "("; print(p.first); cout << ", "; print(p.second); cout << ")"; }
template<class T> void print(vector<T> & v) {
    cout << "{";
    if (sz(v)) print(v[0]);
    for (int i = 1; i < sz(v); i++) cout << ", ", print(v[i]);
    cout << "}\n";
}


ll n, m;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> n;
    ll ans = 0;
    for (int i = 1;i <= 1e6; ++i) {
        int len = 0;
        ll x = i;
        ll t = 1;
        while (x) {
            x /= 10;
            len++;
            t *= 10;
        }    
        if (t * i + i <= n) ans++;
        
    }
    cout << ans << endl;
    return 0;
}