#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
const int mo = 1000000007;
struct Node {
  long long A[3][3];
  Node() { memset(A, 0, sizeof(A)); }
} da;
Node Multi(Node a, Node b) {
  Node r;
  for (int i = 0; i < 3; i++)
    for (int j = 0; j < 3; j++)
      for (int k = 0; k < 3; k++)
        r.A[i][j] = (r.A[i][j] + (a.A[i][k] * b.A[k][j])) % mo;
  return r;
}
Node qm(Node a, long long t) {
  if (t == 0) return da;
  if (t == 1) return a;
  Node r = qm(a, t / 2LL);
  r = Multi(r, r);
  if (t % 2 == 1) r = Multi(r, a);
  return r;
}
Node dan;
long long A[maxn];
long long tq(long long a, long long t) {
  if (t == 0) return 1;
  if (t == 1) return a;
  long long r = tq(a, t / 2LL);
  r = (r * r) % mo;
  if (t % 2 == 1) r = r * a;
  r %= mo;
  return r;
}
int main() {
  for (int i = 0; i < 3; i++)
    for (int j = 0; j < 3; j++)
      if (i == j)
        da.A[i][j] = 1;
      else
        da.A[i][j] = 0;
  for (int i = 0; i < 3; i++)
    for (int j = 0; j < 3; j++)
      if (i != j)
        dan.A[i][j] = 1;
      else
        dan.A[i][j] = 0;
  int n;
  cin >> n;
  bool flag = true;
  long long r2 = 2;
  long long AAA = 1;
  for (int i = 0; i < n; i++) {
    scanf("%I64d", &A[i]);
    AAA = (AAA * (A[i] % (mo - 1))) % (mo - 1);
    if (A[i] != 1) {
      flag = false;
    }
  }
  dan = qm(dan, AAA);
  r2 = tq(r2, AAA);
  if (flag) {
    cout << "0/1" << endl;
    return 0;
  }
  long long r1 = dan.A[1][1];
  long long tmp = tq(2LL, mo - 2);
  r1 *= tmp;
  r1 %= mo;
  cout << r1;
  cout << '/';
  r2 *= tmp;
  r2 %= mo;
  cout << r2 << endl;
  return 0;
}
