#include<cstdio> #include<cstring> #include<algorithm> constint MAXN = 2005; structBigInteger { int len, a[20000]; BigInteger(int num = 0) { memset(a, 0, sizeof (a)); len = 1; while (num) { a[len++] = num % 10; num /= 10; } maintain(); } voidprint()const{ for (int i = len; i; i--) printf("%d", a[i]); puts(""); } voidmaintain(){ while (a[len + 1]) len++; while (!a[len] && len > 1) len--; } staticintgetLength(int x){ int len = 0; while (x) { x /= 10; len++; } if (len == 0) len = 1; return len; } BigInteger operator+(const BigInteger &another) const { BigInteger res; res.len = std::max(len, another.len); for (int i = 1; i <= res.len; i++) { res.a[i] += a[i] + another.a[i]; if (res.a[i] > 10) { res.a[i] -= 10; res.a[i + 1]++; } } res.maintain(); return res; } BigInteger operator*(int another) const { BigInteger res; res.len = len + getLength(another); for (int i = 1; i <= res.len; i++) { res.a[i] += a[i] * another; res.a[i + 1] += res.a[i] / 10; res.a[i] %= 10; } res.maintain(); return res; } }; voidmulPermu(BigInteger &a, int n, int m){ if (n < m) a = a * 0; elsefor (int i = n; i > n - m; i--) a = a * i; } intmain(){ int n, m; scanf("%d %d", &n, &m); BigInteger a(2), b(1); mulPermu(a, n + 2, m - 1); a = a * m; a = a * (n + 1); mulPermu(b, n + 1, 2); mulPermu(b, n + 3, m); a = a + b; mulPermu(a, n, n); a.print(); return0; }