#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<math.h>
#include<string.h>
#define LL long long
#define mod 1000
using namespace std;
struct mat
{
int m[105][105];
}unit;
int n,m;
void init_unit()
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i==j)
{
unit.m[i][j] = 1;
}
}
}
}
mat operator * (mat a, mat b)
{
mat ret;
LL x;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
x = 0;
for(int k=0;k<n;k++)
{
x += ((LL)a.m[i][k] * b.m[k][j])%mod;
ret.m[i][j] = x%mod;
}
}
}
return ret;
}
mat pow_mat(mat a, LL x)
{
mat ret = unit;
while(x)
{
if(x & 1) ret = ret*a;
a = a*a;
x >>= 1;
}
return ret;
}
void print(mat tmp)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
printf("%d ",tmp.m[i][j]);
}
printf("\n");
}
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
if(n==0&m==0) break;
init_unit();
mat am;
memset(am.m,0,sizeof(am.m));
for(int i=0;i<m;i++)
{
int a,b;
scanf("%d%d",&a,&b);
am.m[a][b] = 1;
}
//print(am);
int t;
scanf("%d",&t);
for(int i=0;i<t;i++)
{
int a,b,k;
scanf("%d%d%d",&a,&b,&k);
mat tmp = pow_mat(am,k);
//print(tmp);
printf("%d\n",tmp.m[a][b]);
}
}
}
网友评论