#include using namespace std; typedef long long ll; int read() { int n=0,f=1; char ch=getchar(); while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); } while(ch>='0' && ch<='9') { n=(n<<1)+(n<<3)+ch-'0'; ch=getchar(); } return f==1?n:-n; } void write(ll x) { if(x<0) { putchar('-'); x=-x; } if(x>9) write(x/10); putchar((x%10)+'0'); } const int M=1e5+7; const ll MOD=1e9+7; int n,m; ll v; struct Opt{ int id,val; friend bool operator <(Opt x,Opt y) { return x.id>=1; } return res; } ll ans; void work() { sort(a+1,a+1+m); for(int i=1;i=2 && a[i-1].id+1==a[i].id) ans=ans*(v*(v-1)%MOD+1)%MOD; else{ ll mul=qmi(v*v%MOD,a[i].id-a[i-1].id); if(i>=2) mul=(mul+MOD-qmi(v,a[i].id-a[i-1].id-1)*(v-1)%MOD)%MOD; ans=ans*mul%MOD; } } if(a[m].id!=n) { ans=ans*qmi(v*v%MOD,n-a[m].id)%MOD; } write(ans),putchar('\n'); } int main() { freopen("assign.in","r",stdin); freopen("assign.out","w",stdout); int T; T=read(); while(T--) { input(); work(); } return 0; }