#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=70,mod=1e9+7;
int d[N][N];
int f(int x)
{
return ((x*(x-1))/2)%mod;
}
int powmod(int x,int y)
{
int ans=1;
while(y)
{
if(y&1)ans=(ans*x)%mod;
// cout<<x<<' '<<y<<' '<<ans<<endl;
y>>=1;
x*=x;
x%=mod;
}
return ans;
}
int32_t main()
{
ios::sync_with_stdio(0);
cout.tie(0);
cin.tie(0);
int n,m,k;
cin>>n>>m>>k;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
d[i][j]=1e9*(i!=j);
}
}
for(int i=1;i<n;i++)
{
int x,y;
cin>>x>>y;
d[x][y]=1;
d[y][x]=1;
}
for(int m=1;m<=n;m++)
{
for(int s=1;s<=n;s++)
{
for(int e=1;e<=n;e++)
{
d[s][e]=min(d[s][e],d[s][m]+d[m][e]);
}
}
}
int ways=1;
int rem=n-1;
while(m--)
{
int x,y;
cin>>x>>y;
int t=d[x][y];
// cout<<t<<' '<<f(t)<<' '<<k<<' '<<f(k)<<endl;
rem-=2;
ways*=f(t);
ways%=mod;
ways*=f(k);
ways%=mod;
ways*=2;
ways%=mod;
}
cout<<(ways*powmod(k,rem))%mod<<endl;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |