#include<bits/stdc++.h>
#define int long long
using namespace std;
int q,l,r,lim;
__int128 W=72,U;
int f[19][10][20005];
int nxt[20005][10];
map<__int128,int> id;
int tot;
__int128 val[20005];
vector<int> vec[10];
inline int getnxt(__int128 u,int c){
__int128 g=(u<<c)|(u>>c);
for(int i=0;i<c;i++)
if((u>>i)&1) g|=(1<<(c-i));
g&=U;
return g;
}
inline int getans(__int128 x){
for(int i=0;i<=W;i++)
if((x>>i)&1) return i;
return 724;
}
void init(){
U=1;U<<=(W+1);U--;
queue<pair<int,int> > q;
q.push({1,0});id[1]=++tot;val[tot]=1;
while(!q.empty()){
int u=q.front().first,dep=q.front().second;
q.pop();
if(dep>=18) continue;
for(int c=0;c<10;c++){
int v=getnxt(val[u],c);
if(id[v]!=0) nxt[u][c]=id[v];
else{
id[v]=++tot;val[tot]=v;nxt[u][c]=id[v];
q.push({nxt[u][c],dep+1});
}
}
}
for(int i=1;i<=tot;i++) vec[getans(val[i])].push_back(i);
for(int j=0;j<9;j++){
for(int t=0;t<=j;t++)
for(int mask:vec[t]) f[0][j][mask]=1;
for(int i=1;i<=18;i++)
for(int mask=1;mask<=tot;mask++)
for(int c=0;c<10;c++) f[i][j][mask]+=f[i-1][j][nxt[mask][c]];
}
}
inline int calc(int x){
if(lim>=9) return x+1;
x++;
string s=to_string(x);
int len=s.length(),ans=0,u=1;
for(int i=0;i<len;i++){
for(int c=0;c<s[i]-'0';c++) ans+=f[len-i-1][lim][nxt[u][c]];
u=nxt[u][s[i]-'0'];
}
return ans;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
init();
cin>>q;
while(q--){
cin>>l>>r>>lim;
cout<<calc(r)<<' '<<calc(l-1)<<'\n';
}
return 0;
}