#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long LL; #define PB push_back #define MP make_pair #define REP(i,n) for(i=0;i<(n);++i) #define FOR(i,l,h) for(i=(l);i<=(h);++i) #define FORD(i,h,l) for(i=(h);i>=(l);--i) const int MAXN = 100010; const int mod = 1e9+7; const int INF = 0x3f3f3f3f; const double pi = acos(-1.0); const double eps = 1e-6; int mp[MAXN]; int ds[10][10],mark[10]; LL d[10]; void dijkstra(int u) { int i, j, mins, v; for (i = 1; i <= 8; i++) { d[i] = ds[u][i]; mark[i] = false; } mark[u] = true; d[u] = 0; while (1) { mins = INF; for (j = 1; j <= 8; j++) if (!mark[j] && d[j] < mins) mins = d[j], v = j; if (mins == INF) break; mark[v] = true; for (j = 1; j <= 8; j++) if (!mark[j] && d[v] + ds[v][j] < d[j]) d[j] = d[v] + ds[v][j]; } } int main() { int T,n,m,a1,a2,a3,b1,b2,b3,s,t; cin>>T; while(T--) { scanf("%d%d",&n,&m); scanf("%d%d%d%d%d%d",&a1,&b1,&a2,&b2,&a3,&b3); mp[1]=a1; mp[2]=a2; mp[3]=a3; mp[4]=b1; mp[5]=b2; mp[6]=b3; for(int i=1;i<=8;i++) ds[i][i]=0; LL ans=0; for(int i=1; i<=m; i++) { scanf("%d%d",&s,&t); mp[7]=s; mp[8]=t; for(int i=1; i<=8; i++) for(int j=i+1; j<=8; j++) ds[i][j]=ds[j][i]=abs(mp[i]-mp[j]); ds[1][4]=ds[4][1]=ds[2][5]=ds[5][2]=ds[3][6]=ds[6][3]=1; dijkstra(7); ans+=d[8]*i; ans%=mod; } cout<