#include using namespace std; typedef long long LL; int z[300]; int w[300]; int d[300][300]; const LL MOD=1e9+7; LL dp[1001][1001]; inline void zensha(){ fill((LL*)dp,(LL*)dp+1001*1001,0); for(int n=1;n<1001;n++){ dp[n][1]=1; for(int m=2;m<=n;m++) dp[n][m]=m*(dp[n-1][m]+dp[n-1][m-1])%MOD; } } int main() { fill((int*)d,(int*)d+300*300,0); zensha(); int N,M; cin>>N>>M; for(int i=0;i>w[i]; d[i][i]=w[i]; } for(int i=0;i>from>>to; d[from-1][to-1]=min(w[from-1],w[to-1]); } for(int k = 0; k < N; k++) for(int i = 0; i < N; i++) for(int j = 0; j < N; j++) d[i][j]=max(d[i][j],min(d[i][k],d[k][j])); LL res=0; for(int i = 0; i < N; i++)for(int j = 0; j < N; j++){ if(d[i][j]==w[j]){ res+=dp[w[i]][d[i][j]]; res%=MOD; } } cout<