rt
#include <bits/stdc++.h>
using namespace std;
#define int __int128
const int maxn = 105;
int n;
char str[maxn];
struct Number {
int up, down;
} num[maxn];
int cntn, cnts;
char sign[maxn];
int gcd(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b);
}
int lcm(int a, int b) {
return a * b / gcd(a, b);
}
void write(int x) {
if (x < 0) putchar('-'), x = -x;
if (x > 9) write(x / 10);
putchar(x % 10 + '0');
}
signed main() {
scanf("%s", str + 1);
int n = strlen(str + 1);
str[n + 1] = '-';
n++;
int l = 1;
for (int i = 2; i <= n; i++) {
if (str[i] == '+' || str[i] == '-') {
sign[++cnts] = str[i];
int up = 0;
if (str[l] == '-') l++;
for (int j = l; j < i; j++) {
if (str[j] == '/') {
l = j + 1;
break;
}
up = up * 10 + str[j] - '0';
}
int down = 0;
for (int j = l; j < i; j++) {
down = down * 10 + str[j] - '0';
}
l = i + 1;
num[++cntn].up = up;
num[cntn].down = down;
}
}
int base = num[1].down;
for (int i = 2; i <= cntn; i++) {
base = lcm(base, num[i].down);
}
for (int i = 1; i <= cntn; i++) {
int val = base / num[i].down;
num[i].down *= val;
num[i].up *= val;
}
int ans = 0;
if (str[1] == '-') {
ans -= (num[1].up * 2);
}
ans += num[1].up;
for (int i = 1; i < cnts; i++) {
if (sign[i] == '+') {
ans += num[i + 1].up;
} else {
ans -= num[i + 1].up;
}
}
int op = 1;
if (ans < 0) op = -1, ans = -ans;
int val = gcd(base, ans);
if (val == base) write(op * ans / base);
else {
write(op * ans / val);
putchar('/');
write(base / val);
}
return 0;
}