func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 300010;   class cmp {    public:     bool operator()(const pair<long long int, long long int> &a,                     const pair<long long int, long long int> &b) {       if (a.first == b.first) return a.second > b.second;       return a.first < b.first;     }   };   long long int a[N], b[N], fact[N];   long long int mod = 998244353;   void cal() {     fact[1] = 1;     for (long long int i = 2; i < N; i++) {       fact[i] = ((fact[i - 1] % mod) * (i % mod)) % mod;     }   }   bool sort1(const pair<long long int, long long int> &x,              const pair<long long int, long long int> &y) {     if (x.first == y.first) return x.second < y.second;     return x.first < y.first;   }   void solve() {     long long int n;     cin >> n;     cal();     memset(a, 0, sizeof(a));     memset(b, 0, sizeof(b));     long long int i, x, y, f = 0;     vector<pair<long long int, long long int>> v;     for (i = 0; i < n; i++) {       cin >> x >> y;       a[x]++;       b[y]++;       v.push_back({x, y});       if (a[x] == n || b[y] == n) f = 1;     }     if (f) {       cout <<  0  << endl;       return;     }     long long int ans = fact[n];     long long int ans1 = 1;     for (i = 1; i < N; i++) {       if (a[i]) {         long long int cnt = fact[a[i]];         ans1 = ((ans1 % mod) * (cnt % mod)) % mod;       }     }     ans = (ans - ans1 + mod) % mod;     long long int ans2 = 1;     for (i = 1; i < N; i++) {       if (b[i]) {         long long int cnt = fact[b[i]];         ans2 = ((ans2 % mod) * (cnt % mod)) % mod;       }     }     ans = (ans - ans2 + mod) % mod;     sort(v.begin(), v.end(), sort1);     long long int k = 0;     for (i = 0; i < n - 1; i++) {       if (v[i].second > v[i + 1].second) {         k = 1;         break;       }     }     if (k == 0) {       ans1 = 1;       for (i = 0; i < n;) {         long long int j = i;         long long int cnt = 0;         while (j < n && v[i].first == v[j].first && v[i].second == v[j].second) {           j++;           cnt++;         }         i = j;         cnt = fact[cnt];         ans1 = ((ans1 % mod) * (cnt % mod)) % mod;       }       ans = (ans + ans1) % mod;     }     cout << ans << endl;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     cout.tie(NULL);     ;     int t = 1;     while (t--) {       solve();     }     return 0;   }   