#include #include #define rep(i,a,b) for(int i=a;i=0;i--) #define rbit(i,a) for(int i=0;i<(1<bool chmax(T &a, const T &b) { if (abool chmin(T &a, const T &b) { if (b; const ll mod=998244353; //const ll mod=1e9+7; int dx[4]={1,0,-1,0}; int dy[4]={0,1,0,-1}; const string zton="0123456789"; const string atoz="abcdefghijklmnopqrstuvwxyz"; ll gcd(ll a,ll b){ ll r; r=a%b; if(r==0){ return b; } else{ return gcd(b,r); } } typedef pair P; vector G[101010]; int N; ll dp[101010][2]; void dfs(int cu,int pa){ bool f=false; for(int to:G[cu])if(pa!=to){ dfs(to,cu); dp[cu][0]+=dp[to][0]+dp[to][1]; f=true; dp[cu][0]%=mod; if(pa!=0&&cu!=0){ dp[cu][1]+=dp[to][0]+dp[to][1]; dp[cu][1]%=mod; } } if(!f){ dp[cu][0]++; } if(cu!=0&&pa!=0){ dp[cu][1]+=dp[cu][0]; dp[cu][1]%=mod; } return ; } int main(void){ cin >> N; ll ans=1; rep(i,1,N){ int p;cin >> p; p--; G[p].push_back(i); G[i].push_back(p); if(p!=0){ ans*=2; ans%=mod; } } cout << ans << endl; }