#include <bits/stdc++.h>

using namespace std;

long long int tab[100];

int main()
{
    long long int a, b, n, p, i, j;
    cin >> n >> p;
    a=p-1;
    n--;
    tab[0]=p-2;
    for(i=1; i<=80; i++){
        tab[i]=tab[i-1]*tab[i-1];
        tab[i]%=1000000007;
    }
    i=0;
    while(n){
        if(n%2){
            a*=tab[i];
            a%=1000000007;
        }
        i++;
        n/=2;
    }
    cout << a << '\n';
    return 0;
}

#include<bits/stdc++.h>
using namespace std;
 
#define ios ios_base::sync_with_stdio(false) ; cin.tie(NULL) ; cout.tie(NULL) ;
#define endl "\n"
#define f1(i,n) for (int i=0;i<n;i++)
#define f2(i,n) for (int i=1;i<=n;i++)
#define int long long
 
typedef vector<int> vi ;
typedef queue<int> qi ;
typedef vector<vector<int>> vvi ;
//typedef vector<vector<ll>> vvll ;
typedef vector<vector<pair<int,int>>> vvp ;
typedef vector<bool> vb ;
typedef vector<double> vd ;
typedef vector<vector<char>> vvc ;
typedef vector<char> vc ;
typedef pair<int,int> pii ;
typedef vector<pair<int,int>> vpi ;
//typedef vector<pair<ll,ll>> vpll ;
//typedef pair<ll,ll> pll ;
//typedef vector<ll> vll ;
typedef stack<int> si ;
typedef map<int,int> mii ;
typedef set<int> seti ;
typedef double db ;

const int lim = 1000000+100 ;
int mod1 = 998244353 ;
int mod2 = 1000000007 ;
int INF = 2000000000 ;
int M=1000000000000000000+10000000 ;


// **********************************************************

int min(int x,int y) {
    if(x<y) return x;
    else return y;
}

int max(int x,int y) {
    if(x>y) return x;
    else return y;
}

int gcd (int a, int b) {
    if (b == 0)
        return a;
    else
        return gcd (b, a % b);
}

int binpow(int a, int b) {
    if (b == 0)
        return 1;
    int res = binpow(a, b / 2);
    if (b % 2)
        return (((res * res)) * a) ;
    else
        return (res * res) ;
}

// ***********************************************************

signed main() {
    ios
    int n ;cin >> n ;
    int a[n] ;
    f1(i,n) cin >> a[i] ;
    sort(a,a+n) ;
    int sum=0 ;
    int res=0 ;
    for(int i=n-2;i>=0;i--) {
        sum*=2 ;
        sum%=mod1 ;
        sum+=a[i+1] ;
        sum%=mod1 ;
        res+=a[i]*sum ;
//        cout << sum ;
        res%=mod1 ;
    }
    f1(i,n) {
        res+=((a[i]*a[i])%mod1) ;
        res%=mod1 ;
    }
    cout << res ;
}

