#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <map>
using namespace std;
const int Q=1<<17,MOD=1e9+7;
int fac[Q],ifac[Q];
inline int mul(int a,int b)
{return 1LLab%MOD;}
int ksm(int a,int b)
{
int ans=1;
for(;b;b>>=1,a=mul(a,a))
if(b&1)ans=mul(ans,a);
return ans;
}
int L[Q],R[Q];
int pl[Q],pr[Q];
struct dt{
int id,len;
}cmp[Q];
bool cmp1(dt a,dt b)
{return a.len<b.len;}
int in[Q],out[Q];
map<int,int >cov[Q];
int ty,n,ans,pi;
void Print()
{
int val=mul(pi,fac[ans]);
if(ty==1)printf("%d %d\n",ans,val);
else printf("%d\n",ans);
}
void Calc(int x)
{pi=mul(pi,mul(fac[x-1],ifac[x]));}
void ICalc(int x)
{pi=mul(pi,mul(ifac[x-1],fac[x]));}
int main()
{
scanf("%d%d",&ty,&n);
ans=n-3;
//
fac[0]=1;
for(int i=1;i<=n;i++)
fac[i]=mul(i,fac[i-1]);
ifac[n]=ksm(fac[n],MOD-2);
for(int i=n;i;--i)
ifac[i-1]=mul(ifac[i],i);
//
for(int i=1;i<=n-3;i++){
scanf("%d%d",&L[i],&R[i]);
if(L[i]>R[i])swap(L[i],R[i]);
cov[L[i]][R[i]]=i;
ans-=(R[i]==n);
}
//
for(int i=1;i<=n-3;i++)
cmp[i]=(dt){i,R[i]-L[i]};
sort(cmp+1,cmp+n-2,cmp1);
for(int i=1;i<=n;i++)
pl[i]=i-1,pr[i]=i+1;
pl[1]=n,pr[n]=1;
for(int i=1;i<=n-3;i++){
int id=cmp[i].id,l=L[id],r=R[id];
in[id]=pr[l];
pr[l]=r,pl[r]=l;
}
//
for(int i=1;i<=n-3;i++){
out[cov[L[i]][in[i]]]=R[i];
out[cov[in[i]][R[i]]]=L[i];
}
for(int i=1;i<=n-3;i++)
if(!out[i]){
if(L[i]==1)out[i]=n;
else out[i]=1;
}
//
pi=1;
for(int i=1;i<=n-3;i++)
if(R[i]!=n)Calc(R[i]-L[i]-1);
Print();
int m;
for(scanf("%d",&m);m;--m){
int a,b;
scanf("%d%d",&a,&b);
if(a>b)swap(a,b);
int id=cov[a][b],len=b-a-1;
if(out[id]==n){
--ans;
ICalc(len);
Print();
Calc(len);
++ans;
}
else{
int ano=out[id]-in[id]-1;
ICalc(len),Calc(ano);
Print();
Calc(len),ICalc(ano);
}
}
return 0;
}