#include #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define per(i,a,b) for(int i=(a);i>=(b);i--) #define REP(i,n) for(int i=(0);i<(n);i++) #define fi first #define se second #define pb push_back #define mp make_pair using namespace std; typedef pair pii; typedef vector vi; typedef long long ll; template inline void read(T &x){ int f=0;x=0;char ch=getchar(); for(;!isdigit(ch);ch=getchar())f|=(ch=='-'); for(;isdigit(ch);ch=getchar())x=x*10+ch-'0'; if(f)x=-x; } const int mod=1e9+7; const int N=2000005; int a[N],fac[N],rev[N],n,ans; map cnt; inline int power(int x,int p){ int res=1; for(;p;p>>=1,x=(ll)x*x%mod) if(p&1)res=(ll)res*x%mod; return res; } inline int C(int n,int m){ if(m<0||m>n)return 0; return (ll)fac[n]*rev[m]%mod*rev[n-m]%mod; } void MAIN(){ cnt.clear(); read(n); rep(i,1,2*n){ read(a[i]); cnt[a[i]]++; } ans=1; int las=0; for(auto x:cnt){ int t=x.se; if(las==0){ ans=(ll)ans*C(t,t/2)%mod; if(t&1)ans=2*ans%mod; } else{ if(t&1){ ans=(ll)ans*C(t,t/2)%mod; } else{ ans=(ll)ans*(C(t,t/2)+C(t,t/2-1))%mod; } } las^=t&1; } cout<