using
System;
public
class
GFG
{
static
readonly
int
max = 100000;
static
readonly
int
mod = 1000000007;
static
long
[]inv =
new
long
[max];
static
long
[]fact =
new
long
[max];
static
long
[]facinv =
new
long
[max];
static
void
ncrPrecomputation()
{
inv[0] = inv[1] = 1;
fact[0] = fact[1] = 1;
facinv[0] = facinv[1] = 1;
for
(
int
i = 2; i < max; i++) {
inv[i] = inv[mod % i] * (mod - mod / i) % mod;
fact[i] = (fact[i - 1] * i) % mod;
facinv[i] = (inv[i] * facinv[i - 1]) % mod;
}
}
static
long
nCr(
long
n,
long
r)
{
return
((fact[(
int
)n] * facinv[(
int
)r]) % mod * facinv[(
int
)(n - r)])
% mod;
}
static
long
sumMaxMin(
long
[]arr,
long
N,
long
K)
{
Array.Sort(arr);
long
sumMax = 0;
for
(
int
i = (
int
)K - 1; i < N; i++) {
sumMax += (arr[i] * nCr(i, K - 1));
}
long
sumMin = 0;
for
(
int
i = 0; i <= N - K; i++) {
sumMin += (arr[i] * nCr(N - i - 1, K - 1));
}
return
(sumMax - sumMin);
}
public
static
void
Main(String[] args)
{
long
[]arr = { 1, 1, 3, 4 };
long
K = 2;
long
N = arr.Length;
ncrPrecomputation();
Console.WriteLine(sumMaxMin(arr, N, K));
}
}