You are given two integers n n n and m m m. Calculate the number of pairs of arrays ( a , b ) (a,b) (a,b) such that:
- the length of both arrays is equal to m m m;
- each element of each array is an integer between 1 1 1 and n n n (inclusive);
- a i ≤ b i a_i≤b_i ai≤bi for any index i i i from 1 1 1 to m m m;
- array
a
a
a is sorted in
non-descending
order; - array
b
b
b is sorted in
non-ascending
order.
As the result can be very large, you should print it modulo 1 0 9 + 7 10^9+7 109+7.
Input
The only line contains two integers n n n and m m m ( 1 ≤ n ≤ 1000 , 1 ≤ m ≤ 10 ) (1≤n≤1000, 1≤m≤10) (1≤n≤1000,1≤m≤10).
Output
Print one integer – the number of arrays a a a and b b b satisfying the conditions described above modulo 1 0 9 + 7 10^9+7 109+7.
Examples
input
2 2
output
5
input
10 1
output
55
input
723 9
output
157557417
Note
In the first test there are 5 5 5 suitable arrays:
- a=[1,1],b=[2,2];
- a=[1,2],b=[2,2];
- a=[2,2],b=[2,2];
- a=[1,1],b=[2,1];
- a=[1,1],b=[1,1].
仍然要注意到 b b b的最小元素(尾元素)不小于 a a a的最大元素(尾元素)
因为 a a a不下降, b b b不上升,那么给定 2 m 2m 2m个数,有且仅有 1 1 1种方案组成符合条件的 a , b a,b a,b数组
也就是说,从 1 − n 1−n 1−n选 2 m 2m 2m个数,可以选重复的,问有多少种选法??
也就是说,把 2 m 2m 2m个小球投到 1 − n 1−n 1−n个盒子,盒子可以为空,有多少种投法。
为了方便,先把 n n n个盒子都放一个苹果,也就是 2 ∗ m + n 2∗m+n 2∗m+n放在 n n n个盒子,每个盒子至少放一个
这样就可以用隔板法。 2 ∗ m + n − 1 2∗m+n−1 2∗m+n−1个间隙,从中选出 n − 1 n−1 n−1个间隙放隔板,就分成了 n n n份。
答案是 C 2 ∗ m + n − 1 n − 1 C_{2*m+n-1}^{n-1} C2∗m+n−1n−1
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
const int maxn=2e5+10;
int n,m;
ll f[maxn+10],inv[maxn+10];
ll qpow(ll a,ll b) {
ll res = 1;
while (b) {
if (b & 1) res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
int main() {
scanf("%d%d", &n, &m);
f[1] = 1;
for (int i = 2; i <= maxn; i++) f[i] = f[i - 1] * i % mod;
inv[maxn] = qpow(f[maxn], mod - 2);
for (int i = maxn - 1; i >= 0; i--) {
inv[i] = inv[i + 1] * (i + 1) % mod;
}
printf("%lld\n", f[2 * m + n - 1] * inv[2 * m] % mod * inv[n - 1] % mod);
return 0;
}