This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <stdio.h>
const int mod = 1e9 + 7;
long long f(long long a, long long b) {
if (b == 0) return 1;
if (b == 1) return a;
long long v = f(a, b / 2);
v = (v*v) % mod;
if (b & 1) v = (v*a) % mod;
return v;
}
long long mul(long long a, long long b) {
a %= mod; b %= mod;
if (a < 0) a += mod;
if (b < 0) b += mod;
return (a*b) % mod;
}
long long div(long long a, long long b) {
return (a * f(b, mod - 2)) % mod;
}
long long n, m;
long long p1, q, p2, p3, p4, p, v;
int main() {
scanf("%lld%lld", &n, &m); n %= mod; m %= mod;
q = mul(mul(mul(n, n + 1), m), m + 1);
p1 = mul(mul(mul(mul(mul(mul(9, m), m + 1), n), n + 1), n + 1), m + 1);
p2 = mul(mul(mul(mul(mul(mul(3, m), m + 1), n), n + 1), 2 * n + 1), -1 - m);
p3 = mul(mul(mul(mul(mul(m, m + 1), 2 * m + 1), n), n + 1), 2 * n + 1);
p4 = mul(mul(mul(mul(mul(mul(3, m), m + 1), 2 * m + 1), n), n + 1), -n - 1);
if (p1 < 0) p1 += mod;
if (p2 < 0) p2 += mod;
if (p3 < 0) p3 += mod;
if (p4 < 0) p4 += mod;
p = (p1 + p2 + p3 + p4) % mod;
printf("%lld", div(p, q));
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |