func_code_string: #include <bits/stdc++.h>   using namespace std;   template <class T>   using v2d = vector<vector<T> >;   template <class T>   bool uin(T &a, T b) {     return a > b ? (a = b, true) : false;   }   template <class T>   bool uax(T &a, T b) {     return a < b ? (a = b, true) : false;   }   mt19937 rng(chrono::system_clock::now().time_since_epoch().count());   const int maxN = 1e3 + 10;   const int maxK = 1e3 + 10;   const long long mod = 998244353;   int n, k, a[maxN], lowbound[maxN], upbound[maxN];   long long dp[maxN][maxK], res = 0;   inline void normalize(long long &a) { a = (a % mod + mod) % mod; }   long long Try(int dist) {     long long r = 0;     for (int i = 1; i <= (int)(n); ++i) {       lowbound[i] = lowbound[i - 1];       while (a[i] - a[lowbound[i] + 1] >= dist) {         ++lowbound[i];       }       upbound[i] = upbound[i - 1];       while (a[i] - a[upbound[i] + 1] > dist) {         ++upbound[i];       }     }     for (int i = 1; i <= (int)(n); ++i) {       dp[i][1] = dp[i - 1][1] + 1;       for (int j = (int)(2); j <= (int)(k); ++j) {         dp[i][j] = dp[lowbound[i]][j - 1] + dp[i - 1][j];         if (dp[i][j] >= mod) {           dp[i][j] -= mod;         }       }     }     r = dp[n][k];     for (int i = 1; i <= (int)(n); ++i) {       dp[i][1] = dp[i - 1][1] + 1;       for (int j = (int)(2); j <= (int)(k); ++j) {         dp[i][j] = dp[upbound[i]][j - 1] + dp[i - 1][j];         if (dp[i][j] >= mod) {           dp[i][j] -= mod;         }       }     }     r -= dp[n][k];     if (r < 0) {       r += mod;     }     return r;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(nullptr);     cin >> n >> k;     for (int i = 1; i <= (int)(n); ++i) {       cin >> a[i];     }     sort(a + 1, a + n + 1);     for (int i = 1; i <= (int)(a[n] / (k - 1)); ++i) {       res += i * Try(i) % mod;       if (res >= mod) {         res -= mod;       }     }     cout << res;     return 0;   }   