#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("bigNumber.in");
ofstream out("bigNumber.out");
#define ll long long
#define ull unsigned long long
#define pb push_back
const int NMax = 1e3 + 5;
int T;
char str[NMax];
// str - sir auxiliar pentru citire;
void readNr(short*);
ll getNr(short*);
void print(short*);
short cmp(short*,short*);
void add(short*,short*);
void sub(short*,short*);
void prod(short*,ll);
void prod(short*,short*);
ll imp(short*,ll);
ll imp(short*,short*);
ll rem(short*,ll);
// readNr(a) = citeste un big number din input si il pune in vectorul a;
// getNr(a) = returneaza un numar mic dintr-unul mare (a)
// pentru functiile special implementate pentru numere mici;
// print(a) = afiseaza corect numarul retinut in big number-ul a;
// cmp(a,b) - compara doua numere mari; returneaza -1 daca a<b, 0: a==b, 1: a>b;
// add(a,b) - suma celor doua numere mari este pusa in a;
// sub(a,b) - a>b; diferenta celor doua numere mari este pusa in a;
// prod(a,nr) - produsul dintre numarul mare a si numarul mic nr este pus in a;
// prod(a,b) - produsul dintre cele doua numere mari este pus in a;
// imp(a,nr) - catul impartirii dintre numarul mare a si numarul mic nr este pus in a,
// restul este returnat;
// imp(a,b) - catul impartirii dintre numarul mare a si numarul mare b este pus in a,
// restul este ignorat, dar se poate obtine usor;
// rem(a,nr) - restul impartirii dintre numarul mare a si numarul mic nr este returnat,
// a ramane neschimbat;
int main() {
in>>T;
while (T--) {
char tip;
in>>tip;
in.getline(str,NMax);
short a[NMax] = {},b[NMax] = {};
readNr(a);
readNr(b);
if (tip == '<') {
out<<cmp(a,b)<<'\n';
}
else if (tip == '+') {
add(a,b);
print(a);
}
else if (tip == '-') {
if (cmp(a,b) == 1 || cmp(a,b) == 0) {
sub(a,b);
print(a);
}
else {
sub(b,a);
out<<"-";
print(b);
}
}
else if (tip == 'p') {
ll nr = getNr(b);
prod(a,nr);
print(a);
}
else if (tip == '*') {
prod(a,b);
print(a);
}
else if (tip == 'd') {
ll nr = getNr(b);
imp(a,nr);
print(a);
}
else if (tip == '/') {
imp(a,b);
print(a);
}
else if (tip == 'r') {
ll nr = getNr(b);
out<<rem(a,nr)<<'\n';
}
}
in.close();out.close();
return 0;
}
void readNr(short* a) {
cin.getline(str,NMax);
N = strlen(str);
a[0] = N;
for (int i=1;i<=N;--i) {
a[i] = str[N-i] - '0';
}
}
ll getNr(short* a) {
ll ans = 0;
for (int i=a[0];i>0;--i) {
ans = ans * 10 + a[i];
}
return ans;
}
void print(short* a) {
for (int i=a[0];i>0;--i) {
out<<a[i];
}
out<<'\n';
}
short cmp(short* a,short* b) {
if (a[0] < b[0]) {
return -1;
}
if (a[0] > b[0]) {
return 1;
}
for (int i=a[0];i>0;--i) {
if (a[i]<b[i]) {
return -1;
}
if (a[i]>b[i]) {
return 1;
}
}
return 0;
}
void add(short* a,short* b) {
for (int i=1,t = 0;i <= a[0] || t;++i,t/=10) {
a[i] = (t += a[i]+b[i])%10;
}
a[0] = i-1;
}
void sub(short* a,short* b) {
for (int i=1,t = 0;i <= a[0];++i) {
a[i] -= b[i] + t;
a[i] += (t = (a[i] < 0)) * 10;
}
while (a[a[0]] == 0 && a[0]>1) {
--a[0];
}
}
void prod(short* a,ll nr) {
for (int i=1,t = 0;i <= a[0] || t;++i,t/=10) {
a[i] = (t += a[i]*nr)%10;
}
a[0] = i-1;
if (nr == 0) {
a[0] = 1;
a[1] = 0;
}
}
void prod(short* a,short* b) {
short c[NMax] = {};
for (int i=1;i <= a[0];++i) {
for (int j=1,t=0;j <= b[0] || t;++j,t /= 10) {
c[i+j-1] = (t += a[i]*b[j] + c[i+j-1])%10;
}
}
if ((a[0] == 1 && a[1] == 0) || (b[0] == 1 && b[1] == 0)) {
a[0] = 1;
a[1] = 0;
return;
}
if (c[a[0]+b[0]] != 0) {
c[0] = a[0]+b[0];
}
else {
c[0] = a[0]+b[0]-1;
}
for (int i=0;i <= c[0];++i) {
a[i] = c[i];
}
}
ll imp(short* a,ll b) {
int t=0;
for (int i=a[0];i>0;--i) {
a[i] = (t = t * 10 + a[i])/b;
t %= b;
}
while (a[a[0]] == 0 && a[0]>1) {--a[0];}
return t;
}
ll rem(short* a,ll b) {
int t=0;
for (int i=a[0];i>0;--i) {
t = (t * 10 + a[i])%b;
t %= b;
}
return t;
}
ll imp(short* a,short* b) {
}