#include<cstdio>
#include<cctype>
#include<algorithm>
#define int long long
using namespace std;
const int mod=998244353,N=1e6+5;
int a[N],b[N],f[N],fac[N<<1],inv[N<<1],ans=0,n,sz[N];
inline int read(){
register int w=0;register char ch=getchar();
while (!isdigit(ch)) ch=getchar();
while (isdigit(ch)){
w=(w<<1)+(w<<3)+(ch&15);
ch=getchar();
}
return w;
}
inline void plus(int &x,int y){
if (x+y>=mod) x=x+y-mod;
else x=x+y;
}
inline int pow(int x,int y){
register int ret=1;
for (;y;y>>=1){
if (y&1) ret=ret*x%mod;
x=x*x%mod;
}
return ret;
}
inline int C(int x,int y){
if (x<y||y<0) return 0;
return fac[x]*inv[y]%mod*inv[x-y]%mod;
}
inline void Init(int x){
fac[0]=1;
for (register int i=1;i<=x;++i) fac[i]=fac[i-1]*i%mod;
inv[x]=pow(fac[x],mod-2);
for (register int i=x-1;~i;--i) inv[i]=inv[i+1]*(i+1)%mod;
f[0]=1;
for (register int i=1;i<=n;++i) f[i]=(C(i<<1,i)-C(i<<1,i-1)+mod)%mod;
}
inline void getsize(int u){
sz[u]=1;
if (a[u]) getsize(a[u]);
if (b[u]) getsize(b[u]);
sz[u]+=sz[a[u]]+sz[b[u]];
}
inline void getans(int u,int w){
for (register int i=0;i<sz[a[u]];++i) plus(ans,w*f[i]%mod*f[sz[u]-i-1]%mod);
if (a[u]) getans(a[u],w*f[sz[b[u]]]%mod);
if (b[u]) getans(b[u],w);
}
signed main(){
n=read();
for (register int i=1;i<=n;++i) a[i]=read(),b[i]=read();
Init(n<<1);
for (register int i=1;i<n;++i) plus(ans,f[i]);
getsize(1);getans(1,1);
printf("%lld\n",ans);
return 0;
}