#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
long long const MOD = 998244353;
long long testCases;
long long const NMAX = 1e5;
long long n;
pair<long long, long long> blocks[1 + NMAX];
long long ans;
void fact(long long run) {
for (long long j = 2; j <= run; j++) {
ans = (1LL * ans * j) % MOD;
}
}
bool comp(pair<long long, long long> p1, pair<long long, long long> p2) {
if (p1.x != p2.x) {
return p1.x > p2.x;
}
return p1.y > p2.y;
}
int main() {
cin >> testCases;
while(testCases--) {
cin >> n;
for (long long i = 1; i <= n; i++) {
cin >> blocks[i].x >> blocks[i].y;
if (blocks[i].x < blocks[i].y) {
swap(blocks[i].x, blocks[i].y);
}
}
sort (blocks+1, blocks+n+1, comp);
bool impossible = false;
for (long long i = 1; i <= n-1; i++) {
if (blocks[i].y < blocks[i+1].y) {
impossible = true;
break;
}
}
if (impossible) {
cout << 0 << "\n";
continue;
}
ans = 1;
if (blocks[1].x != blocks[1].y) {
ans = 2;
}
for (long long i = 2; i <= n; i++) {
long long ways1 = (1LL * (blocks[i-1].x - blocks[i].x + 1) *(blocks[i-1].y - blocks[i].y + 1)) % MOD;
long long ways2 = 0;
if (blocks[i].x != blocks[i].y && blocks[i-1].x >= blocks[i].y && blocks[i-1].y >= blocks[i].x) {
ways2 = (1LL * (blocks[i-1].x - blocks[i].y + 1) * (blocks[i-1].y - blocks[i].x + 1)) % MOD;
}
ans = (ans * (ways1 + ways2)) % MOD;
}
long long run = 1;
for (long long i = 2; i <= n; i++) {
if (blocks[i-1].x == blocks[i].x && blocks[i-1].y == blocks[i].y) {
run++;
} else {
fact(run);
run = 1;
}
}
fact(run);
assert(ans >= 0);
cout << ans << "\n";
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSB4IGZpcnN0CiNkZWZpbmUgeSBzZWNvbmQKCmxvbmcgbG9uZyBjb25zdCBNT0QgPSA5OTgyNDQzNTM7CmxvbmcgbG9uZyB0ZXN0Q2FzZXM7CmxvbmcgbG9uZyBjb25zdCBOTUFYID0gMWU1Owpsb25nIGxvbmcgbjsKcGFpcjxsb25nIGxvbmcsIGxvbmcgbG9uZz4gYmxvY2tzWzEgKyBOTUFYXTsKbG9uZyBsb25nIGFuczsKCnZvaWQgZmFjdChsb25nIGxvbmcgcnVuKSB7CiAgICBmb3IgKGxvbmcgbG9uZyBqID0gMjsgaiA8PSBydW47IGorKykgewogICAgICAgIGFucyA9ICgxTEwgKiBhbnMgKiBqKSAlIE1PRDsKICAgIH0KfQoKYm9vbCBjb21wKHBhaXI8bG9uZyBsb25nLCBsb25nIGxvbmc+IHAxLCBwYWlyPGxvbmcgbG9uZywgbG9uZyBsb25nPiBwMikgewoJaWYgKHAxLnggIT0gcDIueCkgewoJCXJldHVybiBwMS54ID4gcDIueDsKCX0KCXJldHVybiBwMS55ID4gcDIueTsKfQoKaW50IG1haW4oKSB7CiAgICBjaW4gPj4gdGVzdENhc2VzOwogICAgd2hpbGUodGVzdENhc2VzLS0pIHsKICAgICAgICBjaW4gPj4gbjsKICAgICAgICBmb3IgKGxvbmcgbG9uZyBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICAgICAgY2luID4+IGJsb2Nrc1tpXS54ID4+IGJsb2Nrc1tpXS55OwogICAgICAgICAgICBpZiAoYmxvY2tzW2ldLnggPCBibG9ja3NbaV0ueSkgewogICAgICAgICAgICAgICAgc3dhcChibG9ja3NbaV0ueCwgYmxvY2tzW2ldLnkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHNvcnQgKGJsb2NrcysxLCBibG9ja3MrbisxLCBjb21wKTsKICAgICAgICBib29sIGltcG9zc2libGUgPSBmYWxzZTsKICAgICAgICBmb3IgKGxvbmcgbG9uZyBpID0gMTsgaSA8PSBuLTE7IGkrKykgewogICAgICAgIAlpZiAoYmxvY2tzW2ldLnkgPCBibG9ja3NbaSsxXS55KSB7CiAgICAgICAgCQlpbXBvc3NpYmxlID0gdHJ1ZTsKICAgICAgICAJCWJyZWFrOwogICAgICAgIAl9CiAgICAgICAgfQogICAgICAgIGlmIChpbXBvc3NpYmxlKSB7CiAgICAgICAgCWNvdXQgPDwgMCA8PCAiXG4iOwogICAgICAgIAljb250aW51ZTsKICAgICAgICB9CiAgICAgICAgYW5zID0gMTsKICAgICAgICBpZiAoYmxvY2tzWzFdLnggIT0gYmxvY2tzWzFdLnkpIHsKICAgICAgICAJYW5zID0gMjsKICAgICAgICB9CiAgICAgICAgZm9yIChsb25nIGxvbmcgaSA9IDI7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgICAgIGxvbmcgbG9uZyB3YXlzMSA9ICgxTEwgKiAoYmxvY2tzW2ktMV0ueCAtIGJsb2Nrc1tpXS54ICsgMSkgKihibG9ja3NbaS0xXS55IC0gYmxvY2tzW2ldLnkgKyAxKSkgJSBNT0Q7CiAgICAgICAgICAgIGxvbmcgbG9uZyB3YXlzMiA9IDA7CiAgICAgICAgICAgIGlmIChibG9ja3NbaV0ueCAhPSBibG9ja3NbaV0ueSAmJiBibG9ja3NbaS0xXS54ID49IGJsb2Nrc1tpXS55ICYmIGJsb2Nrc1tpLTFdLnkgPj0gYmxvY2tzW2ldLngpIHsKICAgICAgICAgICAgICAgIHdheXMyID0gKDFMTCAqIChibG9ja3NbaS0xXS54IC0gYmxvY2tzW2ldLnkgKyAxKSAqICAoYmxvY2tzW2ktMV0ueSAtIGJsb2Nrc1tpXS54ICsgMSkpICUgTU9EOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGFucyA9IChhbnMgKiAod2F5czEgKyB3YXlzMikpICUgTU9EOwogICAgICAgIH0KICAgICAgICBsb25nIGxvbmcgcnVuID0gMTsKICAgICAgICBmb3IgKGxvbmcgbG9uZyBpID0gMjsgaSA8PSBuOyBpKyspIHsKICAgICAgICAgICAgaWYgKGJsb2Nrc1tpLTFdLnggPT0gYmxvY2tzW2ldLnggJiYgYmxvY2tzW2ktMV0ueSA9PSBibG9ja3NbaV0ueSkgewogICAgICAgICAgICAgICAgcnVuKys7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBmYWN0KHJ1bik7CiAgICAgICAgICAgICAgICBydW4gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZhY3QocnVuKTsKICAgICAgICBhc3NlcnQoYW5zID49IDApOwogICAgICAgIGNvdXQgPDwgYW5zIDw8ICJcbiI7CiAgICB9Cn0=