#include #include int cmp_int (const void *ap, const void *bp) { int a = *(int *)ap; int b = *(int *)bp; if (a < b) { return -1; } if (a > b) { return 1; } return 0; } int main () { int n = 0; int x[100000] = {}; int y[100000] = {}; int res = 0; long long ans = 1LL; long long mod_num = 998244353LL; int idx = 0; res = scanf("%d", &n); for (int i = 0; i < n; i++) { res = scanf("%d", x+i); } for (int i = 0; i < n; i++) { res = scanf("%d", y+i); y[i] *= -1; } qsort(x, n, sizeof(int), cmp_int); qsort(y, n, sizeof(int), cmp_int); while (idx < n && x[idx]+y[idx] < 0) { idx++; } for (int i = 0; i < idx; i++) { ans *= (long long)(i+1); ans %= mod_num; } for (int i = 0; i <= n-idx-1; i++) { ans *= (long long)(i+1); ans %= mod_num; } printf("%lld\n", ans); return 0; }