Với yêu cầu đầu tiên, ta chỉ cần for từ n ngược về để tìm vị trí đầu tiên có a[i]>a[i+1].
Trong yêu cầu thứ 2, kết quả của bài toán chính là số Catalan thứ n+1. Công thức số Catalan:
\[C_n = \frac{1}{n+1}\binom{2n}{n} = \frac{(2n)!}{(n+1)!n!} = \prod_{k=2}^{n} \frac{n+k}{k}\]
Ngoài ra có thể xem bài ORGAN để có một cái nhìn tổng quát hơn về bài này.
Vì đề yêu cầu tính trong module \(10^9\) không phải là số nguyên tố nên ta không thể sử dụng
phép nghịch đảo module để tính thương. Trong bài này, ta dùng cách phân tích thành thừa
số nguyên tố. Dùng công thức \(C_n = \prod_{k=2}^{n} \frac{n+k}{k}\), ta phân tích thành thừa
số nguyên tố mỗi số nguyên trên tử rồi cộng các số mũ lại với nhau, tương tự ta cũng phân tích
các số nguyên dưới mẫu.
Vì cần phân tích nhiều số nguyên nên đoạn code trên kết hợp việc phân tích nguyên tố với sàng
nguyên tố.