#include #include #include using namespace std; #define N 35 #define FF(i,n) for(int i=0;i>=1){ if(m&1) matrixMul(ans,init,n,mod); matrixMul(init,init,n,mod); } } int main(void){ int t; int i,j,k,n,mod; int Map[N][N]; n=30; mod=2008; while(~scanf("%d",&t)){ int a,b; int ind=0; map M; memset(Map,0,sizeof(Map)); while(t--){ scanf("%d%d",&a,&b); if(M.find(a)==M.end()) M[a]=ind++; if(M.find(b)==M.end()) M[b]=ind++; Map[M[b]][M[a]]++; } scanf("%d",&t); while(t--){ int v1,v2; int t1,t2; scanf("%d%d%d%d",&v1,&v2,&t1,&t2); if(M.find(v1)==M.end()||M.find(v2)==M.end()||(t1==0&&t2==0)){ printf("0\n"); continue; } memset(ans,0,sizeof(ans)); ans[M[v1]]=1; int ret; if(t1==0) ret=0; else{ FF(j,M.size())FF(k,M.size()) init[j][k]=Map[j][k]; matrixMul(ans,init,M.size(),t1,mod); ret=ans[M[v2]]%mod; } t1++; for(;t1<=t2;t1++){ FF(i,M.size())FF(j,M.size()) init[i][j]=Map[i][j]; matrixMul(ans,init,M.size(),1,mod); ret=(ret+ans[M[v2]])%mod; } printf("%d\n",ret); } } }