#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline bool chkmin(T &a, const T &b) {
  return a > b ? a = b, 1 : 0;
}
template <typename T>
inline bool chkmax(T &a, const T &b) {
  return a < b ? a = b, 1 : 0;
}
const int oo = 0x3f3f3f3f;
const int __buffsize = 100000;
char __buff[__buffsize];
char *__buffs, *__buffe;
template <typename T>
inline T &Read(T &first) {
  static char c;
  while (1) {
    c = (__buffs == __buffe ? fread(__buff, 1, __buffsize, stdin),
         __buffe = __buff + __buffsize, *((__buffs = __buff)++) : *(__buffs++));
    if (c == '-' || (c >= '0' && c <= '9')) break;
  }
  bool flag = c == '-';
  first = flag ? 0 : c - '0';
  while (1) {
    c = (__buffs == __buffe ? fread(__buff, 1, __buffsize, stdin),
         __buffe = __buff + __buffsize, *((__buffs = __buff)++) : *(__buffs++));
    if (c < '0' || c > '9') break;
    (first *= 10) += c - '0';
  }
  if (flag) first = -first;
  return first;
}
const int Mod = 1e9 + 7;
inline int fpm(long long b, long long e, int m) {
  b %= m;
  long long t = 1;
  for (; e; e >>= 1, (b *= b) %= m)
    if (e & 1) (t *= b) %= m;
  return t;
}
int main() {
  int K;
  Read(K);
  int ans = 2;
  long long n = 1;
  bool flag = 1;
  for (int i = (0), i_end_ = (K); i < i_end_; ++i) {
    long long first;
    Read(first);
    flag &= (first & 1);
    if (LLONG_MAX / first >= n)
      n *= first;
    else
      n = LLONG_MAX;
    ans = fpm(ans, first, Mod);
  }
  if (n == 1)
    puts("0/1");
  else {
    ans = (long long)ans * ((Mod + 1) >> 1) % Mod;
    int tmp = ans;
    if (flag)
      (ans -= 1) %= Mod;
    else
      (ans += 1) %= Mod;
    ans = (long long)ans * ((Mod + 1) / 3) % Mod;
    printf("%d/%d\n", ans, tmp);
  }
  return 0;
}
