Count All Valid Pickup and Delivery Options

hard math dp

Problem

Given n orders, each consisting of a pickup and a corresponding delivery, count the number of valid orderings such that delivery(i) is always after pickup(i). Return the answer mod 10^9 + 7.

Inputn = 2
Output6
P1 P2 D1 D2, P1 P2 D2 D1, P1 D1 P2 D2, P2 P1 D1 D2, P2 P1 D2 D1, P2 D2 P1 D1.

def count_orders(n):
    MOD = 10**9 + 7
    ans = 1
    for k in range(1, n + 1):
        ans = ans * k * (2 * k - 1) % MOD
    return ans
function countOrders(n) {
  const MOD = 1_000_000_007n;
  let ans = 1n;
  for (let k = 1n; k <= BigInt(n); k++) {
    ans = ans * k % MOD * (2n * k - 1n) % MOD;
  }
  return Number(ans);
}
class Solution {
    public int countOrders(int n) {
        long ans = 1, MOD = 1_000_000_007L;
        for (long k = 1; k <= n; k++) ans = ans * k % MOD * (2 * k - 1) % MOD;
        return (int) ans;
    }
}
int countOrders(int n) {
    long long ans = 1, MOD = 1000000007LL;
    for (long long k = 1; k <= n; k++) ans = ans * k % MOD * (2 * k - 1) % MOD;
    return (int) ans;
}
Time: O(n) Space: O(1)