#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=5e6+10;
struct node {
	int u,v;
	ll w;
} e[maxn];
ll a[maxn];
ll mod;
int fa[maxn];
int n,m;
ll ans;
bool cmp(node a,node b) {
	return a.w>b.w;
}
int find(int x) {
	if(x==fa[x]) return x;
	return fa[x]=find(fa[x]);
}
ll kruskal() {
	sort(e+1,e+1+m,cmp);
	for(int i=1; i<=m; i++) {
		int u=find(e[i].u);
		int v=find(e[i].v);
		if(u==v) continue;
		ans+=e[i].w;
		fa[u]=v;
	}
	return ans;
}
ll qpow(ll s,ll k) {
	ll res=1;
	while(k>0) {
		if(k&1) res=res*s%mod;
		s=s*s%mod;
		k/=2;
	}
	return res;
}
int main() {
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n>>mod;
	for(int i=1; i<=n; i++) cin>>a[i];
	for(int i=1; i<=n; i++) fa[i]=i;
	for(int i=1; i<n; i++) {
		for(int j=i+1; j<=n; j++) {
			e[++m].u=i;
			e[m].v=j;
			e[m].w=(qpow(a[i],a[j])+qpow(a[j],a[i]))%mod;
		}
	}
	cout<<kruskal();
	return 0;
}

0 条评论

目前还没有评论...