#include #define db double #define reg register #define LL long long #define pb push_back #define lb lower_bound #define ub upper_bound #define ull unsigned long long #define rep(i,a,b) for(int i=a,i##end=b;i<=i##end;++i) #define drep(i,a,b) for(int i=a,i##end=b;i>=i##end;--i) #define erep(i,a) for(int i=head[a];i;i=e[i].nxt) using namespace std; bool Handsome; inline int rd(){ reg int x=0;reg char o=getchar();reg bool O=0; for(;o<48 || 57y && (x=y));} inline void Mx(int &x,int y){if(x=P)x-=P; if(x<0)x+=P; } struct Mtx{ int a[2][2]; Mtx (){a[0][0]=a[0][1]=a[1][0]=a[1][1]=0;} void init(){ a[0][0]=a[0][1]=a[1][0]=1; a[1][1]=P-1; } void clr(){ a[0][0]=a[1][1]=1; a[0][1]=a[1][0]=0; } Mtx operator * (const Mtx &x)const{ Mtx y; rep(i,0,1)rep(j,0,1)rep(k,0,1) Add(y.a[i][k],1ll*a[i][j]*x.a[j][k]%P); return y; } }A,B; void solve(){ a=rd();b=rd();k=rd(); A.init();B.clr(); for(;k;k>>=1){ if(k&1)B=B*A; A=A*A; } int x=(1ll*B.a[0][0]*a+1ll*B.a[1][0]*b)%P;x=(x+P)%P; int y=(1ll*B.a[0][1]*a+1ll*B.a[1][1]*b)%P;y=(y+P)%P; printf("%d %d\n",x,y); } bool Most; int main(){ // printf("%.2lfMB\n",(&Most-&Handsome)/1024.0/1024.0); int t=rd(); while(t--)solve(); return 0; }