#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include <algorithm>
using namespace std;
#define M 20
int num, mod;
//定义矩阵结构体
struct mat
{
int at[M][M];
};
struct mat d;
//a,b矩阵互乘;
mat mul(mat a, mat b)
{
mat t;
memset(t.at, 0, sizeof(t.at));
for(int i=0;i<num;i++)
for(int k=0;k<num;k++)
if(a.at[i][k])
for(int j=0;j<num;j++)
t.at[i][j]=(t.at[i][j]+a.at[i][k]*b.at[k][j])%mod;
return t;
}
//矩阵自乘K次;
mat expo(mat p, int k)
{
if(k==1)
return p;
mat e;
memset(e.at, 0, sizeof(e.at));
for(int i=0;i<num;i++)
e.at[i][i]=1;
if(k==0)
return e;
while(k)
{
if(k & 1)
e=mul(p, e);
p=mul(p, p);
k>>=1;
}
return e;
}
int main()
{
int t;
int k, m, a, b, x, y, n;
int ans;
mat ret;
while(scanf("%d%d", &t,&n)!=EOF)
{
memset(d.at, 0, sizeof(d.at));
if(t==0&&n==0) break;
num=t;
while(n--)
{
scanf("%d%d", &a, &b);
d.at[a][b]=1;
}
scanf("%d",&m);
while(m--)
{
scanf("%d%d%d",&x,&y,&k);
mod=1000;
ret=expo(d, k); //矩阵d自乘k次
ans=ret.at[x][y]%mod;
printf("%d\n", ans);
}
}
return 0;
}