#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T bigmod(T p, T e, T M) {
  long long int ret = 1;
  for (; e > 0; e >>= 1) {
    if (e & 1) ret = (ret * p) % M;
    p = (p * p) % M;
  }
  return (T)ret;
}
template <class T>
inline T modinverse(T a, T M) {
  return bigmod(a, M - 2, M);
}
template <class T>
inline T bpow(T p, T e) {
  long long int ret = 1;
  for (; e > 0; e >>= 1) {
    if (e & 1) ret = (ret * p);
    p = (p * p);
  }
  return (T)ret;
}
int toInt(string s) {
  int sm;
  stringstream ss(s);
  ss >> sm;
  return sm;
}
int toLlint(string s) {
  long long int sm;
  stringstream ss(s);
  ss >> sm;
  return sm;
}
int ts, kk = 1;
struct Bigint {
  string a;
  int sign;
  Bigint() {}
  Bigint(string b) { (*this) = b; }
  int size() { return a.size(); }
  Bigint inverseSign() {
    sign *= -1;
    return (*this);
  }
  Bigint normalize(int newSign) {
    for (int i = a.size() - 1; i > 0 && a[i] == '0'; i--)
      a.erase(a.begin() + i);
    sign = (a.size() == 1 && a[0] == '0') ? 1 : newSign;
    return (*this);
  }
  void operator=(string b) {
    a = b[0] == '-' ? b.substr(1) : b;
    reverse(a.begin(), a.end());
    this->normalize(b[0] == '-' ? -1 : 1);
  }
  bool operator<(const Bigint &b) const {
    if (sign != b.sign) return sign < b.sign;
    if (a.size() != b.a.size())
      return sign == 1 ? a.size() < b.a.size() : a.size() > b.a.size();
    for (int i = a.size() - 1; i >= 0; i--)
      if (a[i] != b.a[i]) return sign == 1 ? a[i] < b.a[i] : a[i] > b.a[i];
    return false;
  }
  bool operator==(const Bigint &b) const { return a == b.a && sign == b.sign; }
  Bigint operator+(Bigint b) {
    if (sign != b.sign) return (*this) - b.inverseSign();
    Bigint c;
    for (int i = 0, carry = 0; i < a.size() || i < b.size() || carry; i++) {
      carry +=
          (i < a.size() ? a[i] - 48 : 0) + (i < b.a.size() ? b.a[i] - 48 : 0);
      c.a += (carry % 10 + 48);
      carry /= 10;
    }
    return c.normalize(sign);
  }
  Bigint operator-(Bigint b) {
    if (sign != b.sign) return (*this) + b.inverseSign();
    int s = sign;
    sign = b.sign = 1;
    if ((*this) < b) return ((b - (*this)).inverseSign()).normalize(-s);
    Bigint c;
    for (int i = 0, borrow = 0; i < a.size(); i++) {
      borrow = a[i] - borrow - (i < b.size() ? b.a[i] : 48);
      c.a += borrow >= 0 ? borrow + 48 : borrow + 58;
      borrow = borrow >= 0 ? 0 : 1;
    }
    return c.normalize(s);
  }
  Bigint operator*(Bigint b) {
    Bigint c("0");
    for (int i = 0, k = a[i] - 48; i < a.size(); i++, k = a[i] - 48) {
      while (k--) c = c + b;
      b.a.insert(b.a.begin(), '0');
    }
    return c.normalize(sign * b.sign);
  }
  Bigint operator/(Bigint b) {
    if (b.size() == 1 && b.a[0] == '0') b.a[0] /= (b.a[0] - 48);
    Bigint c("0"), d;
    for (int j = 0; j < a.size(); j++) d.a += "0";
    int dSign = sign * b.sign;
    b.sign = 1;
    for (int i = a.size() - 1; i >= 0; i--) {
      c.a.insert(c.a.begin(), '0');
      c = c + a.substr(i, 1);
      while (!(c < b)) c = c - b, d.a[i]++;
    }
    return d.normalize(dSign);
  }
  Bigint operator%(Bigint b) {
    if (b.size() == 1 && b.a[0] == '0') b.a[0] /= (b.a[0] - 48);
    Bigint c("0");
    b.sign = 1;
    for (int i = a.size() - 1; i >= 0; i--) {
      c.a.insert(c.a.begin(), '0');
      c = c + a.substr(i, 1);
      while (!(c < b)) c = c - b;
    }
    return c.normalize(sign);
  }
  void print() {
    if (sign == -1) putchar('-');
    for (int i = a.size() - 1; i >= 0; i--) putchar(a[i]);
  }
};
Bigint GCD(Bigint a, Bigint b) {
  if (b.a == "0") return a;
  return GCD(b, a % b);
}
int main() {
  Bigint t, w, b, rs, one, mn, md, p, q, lcm, g, x;
  string a, bb, c;
  c = "1";
  one = c;
  cin >> a >> bb >> c;
  t = a;
  w = bb;
  b = c;
  q = t;
  mn = min(w, b);
  lcm = GCD(w, b);
  lcm = (w * b) / lcm;
  x = t / lcm;
  p = (x - one) * mn;
  g = lcm * x;
  g = t - g + one;
  p = p + min(mn, g);
  if (mn < t || mn == t) {
    p = p + mn - one;
  }
  if (t < w && t < b) {
    p = t;
  }
  g = GCD(p, q);
  p = p / g;
  q = q / g;
  p.print();
  printf("/");
  q.print();
  return 0;
}
