#include <bits/stdc++.h>
#define _nhatminh int main()
#define ll long long
#define str string
#define fir first
#define sec second
#define ld long double
#define pb push_back
#define MOD (ll)998244353
#define freopen(name) if(fopen(name".INP","r")) {freopen (name".INP","r",stdin); freopen (name".OUT","w",stdout);}
#define ALL(x) (x).begin(),(x).end()
#define piint pair < int , int >
#define piL pair < int , ll>
#define pLL pair < ll , ll >
#define TIME (1.0*clock()/CLOCKS_PER_SEC)
using namespace std;
const int Max_n=3*1e5;
ll ans = 0 ;
ll Than[Max_n+3] ;
struct bacfoi{
int a , b ;
} ;
bacfoi a[Max_n+3] ;
bool cmp (bacfoi a , bacfoi b){
return a.a < b.a ;
}
bool cmp_for_b (bacfoi a , bacfoi b) {
return a.b < b.b ;
}
bool cmp_for_a_but_need_b ( bacfoi a , bacfoi b) {
return (a.a!=b.a)?(a.a<b.a):(a.b < b.b) ;
}
void solve(){
int n ; cin >> n ;
Than[0] = 1 ;
for (int i = 1 ; i <= n ; i ++ ){
Than[i] = (Than[i-1] ) * ( i % MOD );
Than[i] %= MOD ;
}
for (int i = 1 ; i <= n ; i ++ ){
cin >> a[i].a >> a[i].b ;
}
sort ( a + 1 , a + n + 1 , cmp ) ;
a[0].b =
a[0].a = -1 ;
int dem = 1 ;
ll ans_1 = 1 ;
for (int i = 1 ; i <= n ; i ++ ){
if ( a[i].a == a[i+1].a ){
dem ++ ;
}
else {
//cerr << ans_1 << ' ' << dem << '\n';
ans_1 *= (Than[dem]) ;
ans_1 %=MOD ;
dem = 1 ;
}
}
cerr << ans_1 << '\n';
sort ( a + 1 , a + n + 1 , cmp_for_b ) ;
dem = 1 ;
ll ans_2 = 1 ;
for (int i = 1 ; i <= n ; i ++ ){
if ( a[i].b == a[i+1].b ){
dem ++ ;
}
else {
ans_2 *= (Than[dem]) ;
ans_2 %=MOD ;
dem = 1 ;
}
}
sort ( a + 1 , a + n + 1 , cmp_for_a_but_need_b ) ;
bool check_run = 1 ;
for (int i = 2 ; i <= n ; i ++ ){
if (a[i].b < a[i-1].b) {
check_run = 0 ;
break ;
}
}
ll ans_3 = 1 ;
if ( check_run ) {
dem = 1 ;
for (int i = 2 ; i <= n ; i ++ ){
if ( a[i].a == a[i-1].a && a[i].b == a[i-1].b){
dem++ ;
}
else {
ans_3 *= (Than[dem]) ;
ans_3 %=MOD ;
dem = 0 ;
}
// cout << a[i].a << ' ' << a[i].b << '\n';
}
ans_3 *= (Than[dem]) ;
}
else ans_3 = 0 ;
ans_3%=MOD ;
cerr << ans_3 << '\n';
ans = (Than[n] - ans_1 - ans_2 + ans_3 )%MOD;
while ( ans < 0 ) ans += MOD ;
ans %= MOD ;
cout << ans << '\n';
}
_nhatminh{
freopen("");
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int q=1;
// cin >> q;
while (q--)
solve();
cerr << '\n' << "Time elapsed " << TIME << "s.\n";
return (0);
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgX25oYXRtaW5oICBpbnQgbWFpbigpCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgc3RyIHN0cmluZwojZGVmaW5lIGZpciBmaXJzdAojZGVmaW5lIHNlYyBzZWNvbmQKI2RlZmluZSBsZCBsb25nIGRvdWJsZQojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIE1PRCAobGwpOTk4MjQ0MzUzCiNkZWZpbmUgZnJlb3BlbihuYW1lKSBpZihmb3BlbihuYW1lIi5JTlAiLCJyIikpIHtmcmVvcGVuIChuYW1lIi5JTlAiLCJyIixzdGRpbik7IGZyZW9wZW4gKG5hbWUiLk9VVCIsInciLHN0ZG91dCk7fQojZGVmaW5lIEFMTCh4KSAoeCkuYmVnaW4oKSwoeCkuZW5kKCkKI2RlZmluZSBwaWludCBwYWlyIDwgaW50ICwgaW50ID4KI2RlZmluZSBwaUwgcGFpciA8IGludCAsIGxsPgojZGVmaW5lIHBMTCBwYWlyIDwgbGwgLCBsbCA+CiNkZWZpbmUgVElNRSAoMS4wKmNsb2NrKCkvQ0xPQ0tTX1BFUl9TRUMpCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCBNYXhfbj0zKjFlNTsKbGwgYW5zID0gMCA7CmxsIFRoYW5bTWF4X24rM10gOwpzdHJ1Y3QgYmFjZm9pewoJaW50IGEgLCBiIDsKfSA7CmJhY2ZvaSBhW01heF9uKzNdIDsKCmJvb2wgY21wIChiYWNmb2kgYSAsIGJhY2ZvaSBiKXsKCXJldHVybiBhLmEgPCBiLmEgOyAKfQpib29sIGNtcF9mb3JfYiAoYmFjZm9pIGEgLCBiYWNmb2kgYikgewoJcmV0dXJuIGEuYiA8IGIuYiA7Cn0KYm9vbCBjbXBfZm9yX2FfYnV0X25lZWRfYiAoIGJhY2ZvaSBhICwgYmFjZm9pIGIpIHsKCXJldHVybiAoYS5hIT1iLmEpPyhhLmE8Yi5hKTooYS5iIDwgYi5iKSA7Cn0Kdm9pZCBzb2x2ZSgpewoKCWludCBuIDsgY2luID4+IG4gOwoJVGhhblswXSA9IDEgOwoJZm9yIChpbnQgaSA9IDEgOyBpIDw9IG4gOyBpICsrICl7CgkJVGhhbltpXSA9IChUaGFuW2ktMV0gKSAqICggaSAlIE1PRCApOwoJCVRoYW5baV0gJT0gTU9EIDsgCgl9Cglmb3IgKGludCBpID0gMSA7IGkgPD0gbiA7IGkgKysgKXsKCQljaW4gPj4gYVtpXS5hID4+IGFbaV0uYiA7Cgl9Cglzb3J0ICggYSArIDEgLCBhICsgbiArIDEgLCBjbXAgKSA7IAoJYVswXS5iID0gCglhWzBdLmEgPSAtMSA7CglpbnQgZGVtID0gMSA7CglsbCBhbnNfMSA9IDEgOwoJZm9yIChpbnQgaSA9IDEgOyBpIDw9IG4gOyBpICsrICl7CgkJaWYgKCBhW2ldLmEgPT0gYVtpKzFdLmEgKXsKCQkJZGVtICsrIDsKCQl9CgkJZWxzZSB7CgkJCS8vY2VyciA8PCBhbnNfMSA8PCAnICcgPDwgZGVtIDw8ICdcbic7CgkJCWFuc18xICo9IChUaGFuW2RlbV0pIDsKCQkJYW5zXzEgJT1NT0QgOyAKCQkJZGVtID0gMSA7CgkJfQoJfQoJY2VyciA8PCBhbnNfMSA8PCAnXG4nOwoJc29ydCAoIGEgKyAxICwgYSArIG4gKyAxICwgY21wX2Zvcl9iICkgOyAKCWRlbSA9IDEgOwoJbGwgYW5zXzIgPSAxIDsKCWZvciAoaW50IGkgPSAxIDsgaSA8PSBuIDsgaSArKyApewoJCWlmICggYVtpXS5iID09IGFbaSsxXS5iICl7CgkJCWRlbSArKyA7CgkJfQoJCWVsc2UgewoJCQlhbnNfMiAqPSAoVGhhbltkZW1dKSA7CgkJCWFuc18yICU9TU9EIDsgCgkJCWRlbSA9IDEgOwoJCX0KCX0KCXNvcnQgKCBhICsgMSAsIGEgKyBuICsgMSAsIGNtcF9mb3JfYV9idXRfbmVlZF9iICkgOyAKCWJvb2wgY2hlY2tfcnVuID0gMSA7IAoJZm9yIChpbnQgaSA9IDIgOyBpIDw9IG4gOyBpICsrICl7CgkJaWYgKGFbaV0uYiA8IGFbaS0xXS5iKSB7CgkJCWNoZWNrX3J1biA9IDAgOwoJCQlicmVhayA7CgkJfQoJfQoJbGwgYW5zXzMgPSAxIDsKCWlmICggY2hlY2tfcnVuICkgewoJCWRlbSA9IDEgOwoJCWZvciAoaW50IGkgPSAyIDsgaSA8PSBuIDsgaSArKyApewoJCQlpZiAoIGFbaV0uYSA9PSBhW2ktMV0uYSAmJiBhW2ldLmIgPT0gYVtpLTFdLmIpewoJCQkJZGVtKysgOwoJCQl9CgkJCWVsc2UgewoJCQkJYW5zXzMgKj0gKFRoYW5bZGVtXSkgOwoJCQkJYW5zXzMgJT1NT0QgOyAKCQkJCWRlbSA9IDAgOwoJCQl9CgkJLy8JY291dCA8PCBhW2ldLmEgPDwgJyAnIDw8IGFbaV0uYiA8PCAnXG4nOwoJCX0KCQlhbnNfMyAqPSAoVGhhbltkZW1dKSA7Cgl9CgllbHNlIGFuc18zID0gMCA7CglhbnNfMyU9TU9EIDsKCWNlcnIgPDwgYW5zXzMgPDwgJ1xuJzsKCWFucyA9IChUaGFuW25dIC0gYW5zXzEgLSBhbnNfMiArICBhbnNfMyApJU1PRDsKCXdoaWxlICggYW5zIDwgMCApIGFucyArPSBNT0QgOwoJYW5zICU9IE1PRCA7Cgljb3V0IDw8IGFucyA8PCAnXG4nOwp9Cl9uaGF0bWluaHsKZnJlb3BlbigiIik7Cmlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CmNpbi50aWUoMCk7IGNvdXQudGllKDApOwppbnQgcT0xOwovLyBjaW4gPj4gcTsKd2hpbGUgKHEtLSkKCXNvbHZlKCk7CmNlcnIgPDwgJ1xuJyA8PCAiVGltZSBlbGFwc2VkICIgPDwgVElNRSA8PCAicy5cbiI7CnJldHVybiAoMCk7Cn0=