func_code_string: #include <bits/stdc++.h>   long long exp(long long x, long long p) {     long long ret = 1;     while (p > 0) {       if (p & 1) {         ret = (ret * x) % 1000000007;       }       p >>= 1;       x = (x * x) % 1000000007;     }     return ret;   }   signed main() {     std::ios::sync_with_stdio(false);     std::cin.tie(0);     std::cout.tie(0);     long long t;     std::cin >> t;     std::vector<long long> powers(2000000, 0);     while (t--) {       long long n, p;       std::cin >> n >> p;       long long arr[n];       for (long long i = 0; i < n; i++) {         std::cin >> arr[i];       }       std::sort(arr, arr + n);       if (p == 1) {         if (n % 2)           std::cout << 1 << std::endl;         else           std::cout << 0 << std::endl;         continue;       }       long long ans = 0;       std::set<long long> pows;       long long r = n - 1;       long long cur = -1;       while (r >= 0) {         cur = arr[r];         r--;         while (r >= 0) {           powers[arr[r]]++;           pows.insert(arr[r]);           long long next = arr[r];           while (powers[next] == p) {             powers[next] = 0;             pows.erase(next);             powers[next + 1]++;             pows.insert(next + 1);             next++;           }           if (powers[cur]) {             powers[cur] = 0;             cur = -1;             pows.erase(cur);             r--;             break;           }           r--;         }       }       while (!pows.empty()) {         long long u = *pows.begin();         pows.erase(pows.begin());         ans = (ans + (exp(p, u) * powers[u]) % 1000000007) % 1000000007;         powers[u] = 0;       }       if (cur != -1) {         ans = (exp(p, cur) + 1000000007 - ans) % 1000000007;       }       std::cout << ans << std::endl;     }     return 0;   }   