Một nhóm khách mời gồm \(m\) nam, \(n\) nữ cùng đi dự tiệc. Nhóm khách mời này được xếp ngồi vào một bàn tròn sao cho giữa hai khách nam có ít nhất một khách nữ ngồi ở giữa (nói cách khác, không có hai khách nam nào ngồi cạnh nhau). Các khách mời đều phân biệt với nhau.
Ví dụ: \(m = 2\) gồm \(m_1, m_2\); \(n = 2\) gồm \(n_1, n_2\), ta có hai cách xếp như sau (đọc theo chiều kim đồng hồ):
-
Cách \(A\): \(m_1, n_1, m_2, n_2\).
-
Cách \(B\): \(m_1, n_2, m_2, n_1\).
Hai cách xếp \(A\) và \(B\) được xem là như nhau nếu xoay vòng cách xếp \(A\) trùng với cách xếp \(B\) và ngược lại.
Yêu cầu: Hãy lập trình tìm số cách xếp sao cho giữa hai nam có ít nhất một nữ ngồi giữa.
Input
Dữ liệu vào gồm một dòng duy nhất ghi hai số nguyên dương \(m, n\) (\(m, n \le 10^6\)), mỗi số cách nhau một dấu cách.
Ràng buộc dữ liệu vào:
-
\(30\%\) số test tương ứng với số điểm có \(m = n\) và \(m, n \le 20\).
-
\(70\%\) số test còn lại không ràng buộc gì thêm.
Output
In ra một số là phần dư của kết quả tìm được khi chia cho \(10^9 + 7\).
Example 1
Input:
2 2
Output:
2
Example 2
Input:
3 3
Output:
12
Example 3
Input:
3 2
Output:
0
Note
Với \(m = n = 3\): các nữ xếp thành vòng có \(2! = 2\) cách, ba nam xếp vào ba khoảng giữa các nữ theo \(3! = 6\) cách, tổng cộng \(12\) cách.
Với \(m = 3, n = 2\): không đủ nữ để ngăn cách các nam nên không có cách xếp nào.
Bình luận
Đăng nhập để bình luận
Chưa có bình luận nào.