#include<stdio.h> #include<string.h> #include <iostream> #include <queue> using namespace std; #define MAXN 205 #define MAXE 300005 #define INF 10000000 int heada[MAXN], headb[MAXN]; int dp[MAXN]; int cnta, cntb; struct Edge{ int node; int next; }; struct Edge edgea[MAXE], edgeb[MAXE]; int rem[MAXE], cnt; queue<int> que; void adda(int a, int b) { edgea[cnta].node = b; edgea[cnta].next = heada[a]; heada[a] = cnta ++; } void addb(int a, int b) { edgeb[cntb].node = b; edgeb[cntb].next = headb[a]; headb[a] = cntb ++; } void spafa(int root, int fa) { dp[root] = 0; while(!que.empty())que.pop(); que.push(root); while(!que.empty()) { int now = que.front(); que.pop(); for(int i = heada[now]; ~i; i = edgea[i].next) { if(edgea[i].node != fa) { if(dp[edgea[i].node] > dp[now] + 1) { que.push(edgea[i].node); dp[edgea[i].node] = dp[now] + 1; } } } } return ; } void spafb(int root, int fa) { dp[root] = 0; while(!que.empty())que.pop(); que.push(root); while(!que.empty()) { int now = que.front(); que.pop(); for(int i = headb[now]; ~i; i = edgeb[i].next) { if(edgeb[i].node != fa) { if(dp[edgeb[i].node] > dp[now] + 1) { que.push(edgeb[i].node); dp[edgeb[i].node] = dp[now] + 1; } } } } return ; } int main() { int T, n, t, D1, D2, A, B; for(scanf("%d", &T); T--;) { char ch; scanf("%d%d", &n, &t); memset(heada, -1, sizeof(heada)); memset(headb, -1, sizeof(headb)); cnta = cntb = 0; while(t--) { cnt = 0; scanf("%c", &ch); scanf("%d%c", &A, &ch); rem[++cnt] = A; while(ch != ' ') { scanf("%d%c", &A, &ch); rem[++cnt] = A; } int k; scanf("%d", &k); if(k) { for(int i = 2; i <= cnt; ++i) { adda(rem[i - 1], rem[i]); addb(rem[i - 1], rem[i]); } } else { for(int i = 2; i <= cnt; ++i) addb(rem[i - 1], rem[i]); } } scanf("%d%d", &D1, &D2); scanf("%d%d", &A, &B); for(int i = 1; i <= n; ++i) dp[i] = INF; spafa(A, -1); int a = dp[B]; for(int i = 1; i <= n; ++i) dp[i] = INF; spafb(A, -1); int b; b = dp[B]; if((a == INF) && (b == INF)) printf("-1\n"); else { int ans = INF; if(a != INF) { if(ans > a * D2) ans = a * D2; } if(b != INF) { if(ans > b * D1) ans = b * D1; } printf("%d\n", ans); } } return 0; }