#include<iostream>
#include<queue>
#include<set>
#include<string>
#include<numeric>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<map>
#define int long long
using namespace std;
const int MaxN = 2e5 + 5;
int ans = 0;
int n;
int a[200001];
int b[200001];
using pii = pair<int, int>;
bool com(int a, int b)
{
return a > b;
}
int gcd(int a, int b)
{
if (a == 0 || b == 0)return 0;
while (a ^= b ^= a ^= b %= a);
return b;
}
unsigned int q_mul(int a, int b, int mod)
{
unsigned int ans = 0;
while (b)
{
if (b & 1)
{
b--;
ans = (ans + a) % mod;
}
b >>= 1;
a = (a + a) % mod;
}
return ans;
}
int qpow(int a, int n, int mod)
{
int ans = 1;
while (n)
{
if (n & 01)ans = ans * a % mod;
a = a * a % mod;
n >>= 1;
}
return ans;
}
struct jihe {
int a;
int b;
};
struct jihe arr[MaxN];
int poww[MaxN];
void solves() {
string a1, b1;
int p;
unsigned int temp1 = 0, temp2 = 0, temp = 0, a, b;
cin >> a1 >> b1 >> p;
poww[0] = 1;
for (int i = 1; i <= 100005; i++) {
poww[i] = (poww[i - 1] * 10) % p;
}
for (int i = 0; i < a1.length(); ++i)
{
temp1 = (temp1 + (a1[i] - '0') * poww[a1.length() - i - 1] % p) % p;
}
//cout<<temp1<<endl;
for (int i = 0; i < b1.length(); ++i)
{
temp2 = (temp2 % p + (b1[i] - '0') * poww[b1.length() - i - 1] % p) % p;
}
//cout<<temp2<<endl;
unsigned int res = q_mul(temp1,temp2,p)%p;
cout << res << endl;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while (t--)
solves();
return 0;
}
#include<iostream>
#include<queue>
#include<set>
#include<string>
#include<numeric>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<map>
#define int long long
using namespace std;
const int MaxN = 2e5 + 5;
int ans = 0;
int n;
int a[200001];
int b[200001];
using pii = pair<int, int>;
inline __int128 read()
{
__int128 x = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch>'9')
{
if (ch == '-')
f = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9')
{
x = x * 10 + ch - '0';
ch = getchar();
}
return x * f;
}
inline void write(__int128 x) {
if (x < 0) {
putchar('-');
x = -x;
}
if (x > 9)
write(x / 10);
putchar(x % 10 + '0');
}
__int128 poww[MaxN];
void solves() {
string a1, b1;
int p;
__int128 temp1 = 0, temp2 = 0, temp = 0, a, b;
cin >> a1 >> b1 >> p;
poww[0] = 1;
for (int i = 1; i <= 100005; i++) {
poww[i] = (poww[i - 1] * 10) % p;
}
for (int i = 0; i < a1.length(); ++i)
{
temp1 = (temp1 + (a1[i] - '0') * poww[a1.length() - i - 1] % p) % p;
}
//cout<<temp1<<endl;
for (int i = 0; i < b1.length(); ++i)
{
temp2 = (temp2 % p + (b1[i] - '0') * poww[b1.length() - i - 1] % p) % p;
}
//cout<<temp2<<endl;
__int128 res = (temp1 * temp2 % p) % p;
write(res);
puts("");
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while (t--)
solves();
return 0;
}