fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define x first
  6. #define y second
  7.  
  8. long long const MOD = 998244353;
  9. long long testCases;
  10. long long const NMAX = 1e5;
  11. long long n;
  12. pair<long long, long long> blocks[1 + NMAX];
  13. long long ans;
  14.  
  15. void fact(long long run) {
  16. for (long long j = 2; j <= run; j++) {
  17. ans = (1LL * ans * j) % MOD;
  18. }
  19. }
  20.  
  21. bool comp(pair<long long, long long> p1, pair<long long, long long> p2) {
  22. if (p1.x != p2.x) {
  23. return p1.x > p2.x;
  24. }
  25. return p1.y > p2.y;
  26. }
  27.  
  28. int main() {
  29. cin >> testCases;
  30. while(testCases--) {
  31. cin >> n;
  32. for (long long i = 1; i <= n; i++) {
  33. cin >> blocks[i].x >> blocks[i].y;
  34. if (blocks[i].x < blocks[i].y) {
  35. swap(blocks[i].x, blocks[i].y);
  36. }
  37. }
  38. sort (blocks+1, blocks+n+1, comp);
  39. bool impossible = false;
  40. for (long long i = 1; i <= n-1; i++) {
  41. if (blocks[i].y < blocks[i+1].y) {
  42. impossible = true;
  43. break;
  44. }
  45. }
  46. if (impossible) {
  47. cout << 0 << "\n";
  48. continue;
  49. }
  50. ans = 1;
  51. if (blocks[1].x != blocks[1].y) {
  52. ans = 2;
  53. }
  54. for (long long i = 2; i <= n; i++) {
  55. long long ways1 = (1LL * (blocks[i-1].x - blocks[i].x + 1) *(blocks[i-1].y - blocks[i].y + 1)) % MOD;
  56. long long ways2 = 0;
  57. if (blocks[i].x != blocks[i].y && blocks[i-1].x >= blocks[i].y && blocks[i-1].y >= blocks[i].x) {
  58. ways2 = (1LL * (blocks[i-1].x - blocks[i].y + 1) * (blocks[i-1].y - blocks[i].x + 1)) % MOD;
  59. }
  60. ans = (ans * (ways1 + ways2)) % MOD;
  61. }
  62. long long run = 1;
  63. for (long long i = 2; i <= n; i++) {
  64. if (blocks[i-1].x == blocks[i].x && blocks[i-1].y == blocks[i].y) {
  65. run++;
  66. } else {
  67. fact(run);
  68. run = 1;
  69. }
  70. }
  71. fact(run);
  72. assert(ans >= 0);
  73. cout << ans << "\n";
  74. }
  75. }
Success #stdin #stdout 0s 5320KB
stdin
1
2
3 4
1 2
stdout
34