#include <iomanip>
#include <iostream>
#include <vector>
#include <string>
#include <cctype>
#include <iterator>
#include <array>
#include <stdio.h>
#include <string.h>
#include <cstddef>
#include <string>
#include <sstream>
#include <math.h>
#include <cmath>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
using std::vector; using std::cout; using std::endl;
using std::cin; using std::string; using std::end;
using std::begin; using std::stringstream;
using namespace std;
template<typename T>
std::vector<T> split(const std::string& line) {
std::istringstream is(line);
return std::vector<T>(std::istream_iterator<T>(is), std::istream_iterator<T>());
}
long long nwd(long long a, long long b){
long long c;
while(b != 0){
c = a % b;
a = b;
b = c;
}
return a;
}
void add(long long *x1, long long *y1, long long *x2, long long *y2){
long long bottom = (*y1) * (*y2);
long long top = ((*x1) * (*y2)) + ((*x2) * (*y1));
//cout << bottom << " " << top << endl;
long long frac;
if(bottom != 0||top != 0){
frac = nwd(top,bottom);
}else{
frac = 1;
}
string sign = "";
if(top * bottom < 0){
sign = "-";
}else{
sign = "";
}
printf("%s%lld / %lld\n",sign.c_str(),abs(top/frac),abs(bottom/frac) );
}
void sub(long long *x1, long long *y1,long long *x2, long long *y2){
long long bottom = (*y1) * (*y2);
long long top = ((*x1) * (*y2)) - ((*x2) * (*y1));
long long frac;
if(bottom != 0||top != 0){
frac = nwd(top,bottom);
}else{
frac = 1;
}
string sign = "";
if(top * bottom < 0){
sign = "-";
}else{
sign = "";
}
printf("%s%lld / %lld\n",sign.c_str(),abs(top/frac),abs(bottom/frac) );
}
void divi(long long *x1, long long *y1, long long *x2, long long *y2){
long long top = (*x1) * (*y2);
long long bottom = (*x2) * (*y1);
long long frac;
if(bottom != 0||top != 0){
frac = nwd(top,bottom);
}else{
frac = 1;
}
string sign = "";
if(top * bottom < 0){
sign = "-";
}else{
sign = "";
}
printf("%s%lld / %lld\n",sign.c_str(),abs(top/frac),abs(bottom/frac) );
}
void mult(long long *x1, long long *y1, long long *x2, long long *y2){
long long top = (*x1) * (*x2);
long long bottom = (*y2) * (*y1);
long long frac;
if(bottom != 0||top != 0){
frac = nwd(top,bottom);
}else{
frac = 1;
}
string sign = "";
if(top * bottom < 0){
sign = "-";
}else{
sign = "";
}
printf("%s%lld / %lld\n",sign.c_str(),abs(top/frac),abs(bottom/frac) );
}
int main()
{
int numOp;
scanf("%d", &numOp);
while(numOp != 0){
long long x1,x2,y1,y2;
char op[2];
scanf("%lld %lld %s %lld %lld", &x1, &y1, op, &x2, &y2);
if( op[0] == '+'){
add(&x1, &y1, &x2,&y2);
}
else if(op[0] == '-'){
sub(&x1,&y1,&x2,&y2);
}
else if(op[0] == '/'){
divi(&x1,&y1,&x2,&y2);
}
else{
mult(&x1,&y1,&x2,&y2);
}
numOp--;
}
return 0;
}
I2luY2x1ZGUgPGlvbWFuaXA+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGNjdHlwZT4KI2luY2x1ZGUgPGl0ZXJhdG9yPgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxjc3RkZGVmPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPG1hdGguaD4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiAKdXNpbmcgc3RkOjp2ZWN0b3I7IHVzaW5nIHN0ZDo6Y291dDsgdXNpbmcgc3RkOjplbmRsOwp1c2luZyBzdGQ6OmNpbjsgdXNpbmcgc3RkOjpzdHJpbmc7IHVzaW5nIHN0ZDo6ZW5kOwp1c2luZyBzdGQ6OmJlZ2luOyB1c2luZyBzdGQ6OnN0cmluZ3N0cmVhbTsKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnN0ZDo6dmVjdG9yPFQ+IHNwbGl0KGNvbnN0IHN0ZDo6c3RyaW5nJiBsaW5lKSB7CiAgICBzdGQ6OmlzdHJpbmdzdHJlYW0gaXMobGluZSk7CiAgICByZXR1cm4gc3RkOjp2ZWN0b3I8VD4oc3RkOjppc3RyZWFtX2l0ZXJhdG9yPFQ+KGlzKSwgc3RkOjppc3RyZWFtX2l0ZXJhdG9yPFQ+KCkpOwp9Cgpsb25nIGxvbmcgIG53ZChsb25nIGxvbmcgYSwgbG9uZyBsb25nIGIpewogICAgbG9uZyBsb25nICBjOwogICAgd2hpbGUoYiAhPSAwKXsKICAgICAgICBjID0gYSAlIGI7CiAgICAgICAgYSA9IGI7CiAgICAgICAgYiA9IGM7CiAgICB9CiAgICByZXR1cm4gYTsKfQoKdm9pZCBhZGQobG9uZyBsb25nICp4MSwgbG9uZyBsb25nICp5MSwgbG9uZyBsb25nICp4MiwgbG9uZyBsb25nICp5Mil7CiAgICBsb25nIGxvbmcgYm90dG9tID0gKCp5MSkgKiAoKnkyKTsKICAgIGxvbmcgbG9uZyB0b3AgPSAoKCp4MSkgKiAoKnkyKSkgKyAoKCp4MikgKiAoKnkxKSk7CiAgICAvL2NvdXQgPDwgYm90dG9tIDw8ICIgIiA8PCB0b3AgPDwgZW5kbDsKICAgIGxvbmcgbG9uZyBmcmFjOwogICAgaWYoYm90dG9tICE9IDB8fHRvcCAhPSAwKXsKICAgICAgICBmcmFjID0gbndkKHRvcCxib3R0b20pOwogICAgfWVsc2V7CiAgICAgICAgZnJhYyA9IDE7CiAgICB9CiAgICBzdHJpbmcgc2lnbiA9ICIiOwogICAgaWYodG9wICogYm90dG9tIDwgMCl7CiAgICAgICAgc2lnbiA9ICItIjsKICAgIH1lbHNlewogICAgICAgIHNpZ24gPSAiIjsKICAgIH0KICAgIHByaW50ZigiJXMlbGxkIC8gJWxsZFxuIixzaWduLmNfc3RyKCksYWJzKHRvcC9mcmFjKSxhYnMoYm90dG9tL2ZyYWMpICk7Cn0KCnZvaWQgc3ViKGxvbmcgbG9uZyAqeDEsIGxvbmcgbG9uZyAqeTEsbG9uZyBsb25nICp4MiwgbG9uZyBsb25nICp5Mil7CiAgICBsb25nIGxvbmcgYm90dG9tID0gKCp5MSkgKiAoKnkyKTsKICAgIGxvbmcgbG9uZyB0b3AgPSAoKCp4MSkgKiAoKnkyKSkgLSAoKCp4MikgKiAoKnkxKSk7CiAgICBsb25nIGxvbmcgZnJhYzsKICAgIGlmKGJvdHRvbSAhPSAwfHx0b3AgIT0gMCl7CiAgICAgICAgZnJhYyA9IG53ZCh0b3AsYm90dG9tKTsKICAgIH1lbHNlewogICAgICAgIGZyYWMgPSAxOwogICAgfQogICAgc3RyaW5nIHNpZ24gPSAiIjsKICAgIGlmKHRvcCAqIGJvdHRvbSA8IDApewogICAgICAgIHNpZ24gPSAiLSI7CiAgICB9ZWxzZXsKICAgICAgICBzaWduID0gIiI7CiAgICB9CiAgICBwcmludGYoIiVzJWxsZCAvICVsbGRcbiIsc2lnbi5jX3N0cigpLGFicyh0b3AvZnJhYyksYWJzKGJvdHRvbS9mcmFjKSApOwp9Cgp2b2lkIGRpdmkobG9uZyBsb25nICp4MSwgbG9uZyBsb25nICp5MSwgbG9uZyBsb25nICp4MiwgbG9uZyBsb25nICp5Mil7CiAgICBsb25nIGxvbmcgdG9wID0gKCp4MSkgKiAoKnkyKTsKICAgIGxvbmcgbG9uZyBib3R0b20gPSAoKngyKSAqICgqeTEpOwogICAgbG9uZyBsb25nIGZyYWM7CiAgICBpZihib3R0b20gIT0gMHx8dG9wICE9IDApewogICAgICAgIGZyYWMgPSBud2QodG9wLGJvdHRvbSk7CiAgICB9ZWxzZXsKICAgICAgICBmcmFjID0gMTsKICAgIH0KICAgIHN0cmluZyBzaWduID0gIiI7CiAgICBpZih0b3AgKiBib3R0b20gPCAwKXsKICAgICAgICBzaWduID0gIi0iOwogICAgfWVsc2V7CiAgICAgICAgc2lnbiA9ICIiOwogICAgfQogICAgcHJpbnRmKCIlcyVsbGQgLyAlbGxkXG4iLHNpZ24uY19zdHIoKSxhYnModG9wL2ZyYWMpLGFicyhib3R0b20vZnJhYykgKTsKfQoKdm9pZCBtdWx0KGxvbmcgbG9uZyAqeDEsIGxvbmcgbG9uZyAqeTEsIGxvbmcgbG9uZyAqeDIsIGxvbmcgbG9uZyAqeTIpewogICAgbG9uZyBsb25nIHRvcCA9ICgqeDEpICogKCp4Mik7CiAgICBsb25nIGxvbmcgYm90dG9tID0gKCp5MikgKiAoKnkxKTsKICAgIGxvbmcgbG9uZyBmcmFjOwogICAgaWYoYm90dG9tICE9IDB8fHRvcCAhPSAwKXsKICAgICAgICBmcmFjID0gbndkKHRvcCxib3R0b20pOwogICAgfWVsc2V7CiAgICAgICAgZnJhYyA9IDE7CiAgICB9CiAgICBzdHJpbmcgc2lnbiA9ICIiOwogICAgaWYodG9wICogYm90dG9tIDwgMCl7CiAgICAgICAgc2lnbiA9ICItIjsKICAgIH1lbHNlewogICAgICAgIHNpZ24gPSAiIjsKICAgIH0KICAgIHByaW50ZigiJXMlbGxkIC8gJWxsZFxuIixzaWduLmNfc3RyKCksYWJzKHRvcC9mcmFjKSxhYnMoYm90dG9tL2ZyYWMpICk7Cn0KCmludCBtYWluKCkKewoKICAgIGludCBudW1PcDsKICAgIHNjYW5mKCIlZCIsICZudW1PcCk7CiAgICB3aGlsZShudW1PcCAhPSAwKXsKICAgICAgICBsb25nIGxvbmcgeDEseDIseTEseTI7CiAgICAgICAgY2hhciBvcFsyXTsKICAgICAgICBzY2FuZigiJWxsZCAlbGxkICVzICVsbGQgJWxsZCIsICZ4MSwgJnkxLCBvcCwgJngyLCAmeTIpOwogICAgICAgIGlmKCBvcFswXSA9PSAnKycpewogICAgICAgICAgICBhZGQoJngxLCAmeTEsICZ4MiwmeTIpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmKG9wWzBdID09ICctJyl7CiAgICAgICAgICAgIHN1YigmeDEsJnkxLCZ4MiwmeTIpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmKG9wWzBdID09ICcvJyl7CiAgICAgICAgICAgIGRpdmkoJngxLCZ5MSwmeDIsJnkyKTsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgbXVsdCgmeDEsJnkxLCZ4MiwmeTIpOwogICAgICAgIH0KICAgICAgICBudW1PcC0tOwogICAgfQogICAgcmV0dXJuIDA7ICAgCn0=