import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Vincent2 {
	private record Fraction(long n, long d) {
		
		public Fraction {
			long g = gcd(n,d);
			n /= g;
			d /= g;
		}
		
		private static long gcd(long a, long b) {
			while (b != 0) {
				a %= b;
				if (a == 0) {return b;}
				b %= a;
			}
			return a;
		}
		
		@Override
		public String toString() {return d == 1 ? n + "" : n + "/" + d;}
		
		public Fraction max(Fraction f) {
			if (n / d != f.n / f.d) {return n / d > f.n / f.d ? this : f;}
			else {return (n % d) * f.d > (f.n % f.d) * d ? this : f;}
		}
	}
	
	private static void read() throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String NS = br.readLine();
		String[] HS = br.readLine().split(" ");
		br.close();
		int N = Integer.parseInt(NS);
		long[] H = new long[N];
		for (int i = 0; i < N; i++) {
			H[i] = Integer.parseInt(HS[i]);
		}

		Fraction f = score(H);
		for (int i = 0; i < N-1-i; i++) {
			long l = H[i];
			H[i] = H[N-1-i];
			H[N-1-i] = l;
		}
		f = f.max(score(H));
		System.out.println(f);
	}

	private static Fraction distance(long[] H, int x, int z) {
		long n = H[z] - H[x + 1];
		long d = H[x] - H[x + 1];
		return new Fraction((z - x - 1) * d + n, d);
	}
	
	private static Fraction score(long[] H) {
		int N = H.length;
		Fraction best = new Fraction(0,1);
		int[] front = new int[N];
		int c = -1;

		for (int i = 0; i < N; i++) {
			while (c >= 0 && H[i] > H[front[c]]) {c--;}
			if (c != -1) {best = best.max(distance(H, front[c], i));}
			c++;
			front[c] = i;
		}
		return best;
	}

	public static void main(String[] args) throws IOException {
		read();
	}
}
