func_code_string: #include <bits/stdc++.h>   using namespace std;   long long gcd(long long a, long long b) { return (a ? gcd(b % a, a) : b); }   long long power(long long a, long long n) {     long long p = 1;     while (n > 0) {       if (n & 1) {         p = p * a;       }       n >>= 1;       a *= a;     }     return p;   }   long long power(long long a, long long n, long long mod) {     long long p = 1;     while (n > 0) {       if (n & 1) {         p = p * a;         p %= mod;       }       n >>= 1;       a *= a;       a %= mod;     }     return p % mod;   }   const int N = 300005;   long long x[N];   long long d[N], a[N];   long long find(int i, int j) {     if (i == 0) return x[j];     return (x[j] - x[i - 1] + 1000000007) % 1000000007;   }   int main() {     int i, j;     int n;     scanf( %d , &n);     for (i = 0; i < n; i++) scanf( %lld , &a[i]);     sort(a, a + n);     x[0] = 1;     for (i = 1; i < n; i++) {       d[i] = a[i] - a[i - 1];       x[i] = (power(2ll, i, 1000000007) + x[i - 1]) % 1000000007;     }     long long ans = 0;     for (i = 1; i < n; i++) {       ans += (d[i] * find(i - 1, n - 2)) % 1000000007;     }     long long z = ans;     for (i = 2; i < n; i++) {       z = (z - (d[i - 1] * x[n - i]) % 1000000007 + 1000000007) % 1000000007;       z = (z * power(2, 1000000007 - 2, 1000000007)) % 1000000007;       ans = (ans + z) % 1000000007;     }     printf( %lld n , ans);     return 0;   }   