#include<bits/stdc++.h>
using namespace std;
namespace IO
{
char buff[1<<21],*p1=buff,*p2=buff;
char getch(){return p1==p2&&(p2=((p1=buff)+fread(buff,1,1<<21,stdin)),p1==p2)?EOF:*p1++;}
template<typename T>void read(T &x){char ch=getch();int fl=1;x=0;while(ch>'9'||ch<'0'){if(ch=='-')fl=-1;ch=getch();}while(ch<='9'&&ch>='0'){x=x*10+ch-48;ch=getch();}x*=fl;}
template<typename T>void read_s(T &x){x="";char ch=getch();while(ch<'a'||ch>'z')ch=getch();while(ch>='a'&&ch<='z'){x+=ch;ch=getch();}}
template<typename T,typename ...Args>void read(T &x,Args& ...args){read(x);read(args...);}
char obuf[1<<21],*p3=obuf;
void putch(char ch) {if(p3-obuf<(1<<21))*p3++=ch;else fwrite(obuf,p3-obuf,1,stdout),p3=obuf,*p3++=ch;}
char ch[100];
template<typename T>void write(T x) {if(!x)return putch('0');if(x<0)putch('-'),x*=-1;int top=0;while(x)ch[++top]=x%10+48,x/=10;while(top)putch(ch[top]),top--;}
template<typename T,typename ...Args>void write(T x,Args ...args) {write(x);write(args...);}
void put(string s){for(int i=0;i<s.size();i++)putch(s[i]);}
void flush(){fwrite(obuf,p3-obuf,1,stdout);}
}
using namespace IO;
const int mod=998244353;
int n,a[1000005];
int f[1000005];
vector<int>w(45);
int cnt[1000005],vis[1000005];
int sum[1000005],suf[1000005];
int t[2][2000005];
inline void add(int &x,int v){x+=v;if(x<0)x+=mod;if(x>=mod)x-=mod;}
const int V=1e6;
void solve(int l,int r)
{
if(l==r) return;
int mid=l+r>>1;
solve(l,mid);
w.clear();
for(int i=l;i<=r;i++) cnt[a[i]]=vis[a[i]]=sum[i]=suf[i]=0;
for(int i=-(r-l+1);i<=r-l+1;i++) t[0][i+V]=t[1][i+V]=0;
int s[2];s[0]=s[1]=0;
for(int i=mid;i>=l;i--)
{
add(s[i&1],f[i]);
++cnt[a[i]];
if(!vis[a[i]]&&cnt[a[i]]>(mid-i+1)/2) w.push_back(a[i]),vis[a[i]]=1;
}
for(int i=l;i<=mid;i++) cnt[a[i]]=0;
for(int i=mid+1;i<=r;i++)
{
add(f[i],s[i&1]);
++cnt[a[i]];
if(!vis[a[i]]&&cnt[a[i]]>(i-mid)/2) w.push_back(a[i]),vis[a[i]]=1;
}
for(int x=0;x<w.size();x++)
{
for(int i=mid;i>=l;i--) suf[i]=suf[i+1]+(a[i]==w[x]?1:-1),add(t[i&1][V+suf[i+1]],f[i]);
for(int j=0;j<=1;j++)
for(int i=r-l;i>=(-r-l+1);i--) add(t[j][i+V],t[j][i+1+V]);
for(int i=mid+1;i<=r;i++) sum[i]=sum[i-1]+(a[i]==w[x]?1:-1),add(f[i],-t[i&1][-sum[i]+V+1]);
for(int i=-(r-l+1);i<=r-l+1;i++) t[0][i+V]=t[1][i+V]=0;
}
solve(mid+1,r);
}
int main()
{
read(n);n<<=1;
for(int i=1;i<=n;i++) read(a[i]);
f[0]=1;
solve(0,n);
write(f[n]);
flush();
return 0;
}