#define _USE_MATH_DEFINES
#include <bits/stdc++.h>

using namespace std;

#define dprint(Exp,...) if(Exp){fprintf(stderr, __VA_ARGS__);}
#define printe(...) fprintf(stderr, __VA_ARGS__);
#define PrtExp(_Exp)  cerr<< #_Exp <<" = "<< (_Exp)
#define PrtExpN(_Exp)  cerr<< #_Exp <<" = "<< (_Exp) <<"\n"

#define SINT(n) scanf("%d",&n)
#define SINT2(n,m) scanf("%d %d",&n,&m)
#define SINT3(n,m,o) scanf("%d %d %d",&n,&m,&o)
#define SINT4(n,m,o,p) scanf("%d %d %d %d",&n,&m,&o,&p)
#define SINT5(n,m,o,p,q) scanf("%d %d %d %d %d",&n,&m,&o,&p,&q)
#define SLL(n) scanf("%lld",&n)
#define SLL2(n,m) scanf("%lld %lld",&n,&m)
#define SLL3(n,m,o) scanf("%lld %lld %lld",&n,&m,&o)
#define SST(s) scanf("%s",s)
#define SCH(c) scanf("%c",&c)

#define GC() getchar()

#define PINT(n) printf("%d",(int)(n))
#define PINT2(n,m) printf("%d %d",(int)(n),(int)(m))
#define PINT3(n,m,l) printf("%d %d %d",(int)(n),(int)(m),(int)(l))
#define PLL(n) printf("%lld",(long long)(n))
#define PST(s) printf("%s",(s))
#define PCH(s) printf("%c",(s))

#define PINTN(n) printf("%d\n",(int)(n))
#define PINT2N(n,m) printf("%d %d\n",(int)(n),(int)(m))
#define PINT3N(n,m,l) printf("%d %d %d\n",(int)(n),(int)(m),(int)(l))
#define PLLN(n) printf("%lld\n",(long long)(n))
#define PSTN(s) printf("%s\n",(s))
#define PCHN(s) printf("%c\n",(s))

#define PSP() printf(" ")
#define PN() printf("\n")

#define PC(c) putchar(c)
#define CSP (' ')
#define SN ("\n")

#define rep(i,a) for(int i=0;i<a;i++)
#define reP(i,a) for(int i=0;i<=a;i++)
#define Rep(i,a) for(int i=a-1;i>=0;i--)
#define ReP(i,a) for(int i=a;i>=0;i--)

#define rEp(i,a) for(i=0;i<a;i++)
#define rEP(i,a) for(i=0;i<=a;i++)
#define REp(i,a) for(i=a-1;i>=0;i--)
#define REP(i,a) for(i=a;i>=0;i--)

#define repft(i,a,b) for(int i=a;i<b;i++)
#define repfT(i,a,b) for(int i=a;i<=b;i++)
#define Repft(i,a,b) for(int i=a-1;i>=b;i--)
#define RepfT(i,a,b) for(int i=a;i>=b;i--)

#define foreach(a,it) for(auto it = a.begin(); it != a.end(); ++it)

#define FILL(a,v) fill(begin(a),end(a), v)
#define FILL0(a) memset(a,0,sizeof(a))
#define FILL1(a) memset(a,-1,sizeof(a))

typedef long long ll;

typedef unsigned long long ull;
typedef pair<int, int> Pi;
typedef pair<ll, ll>   Pll;


const int INF = 0x2aaaaaaa; // 715,827,882
const ll INFLL = 0x1f1f1f1f1f1f1f1fLL;//2,242,545,357,980,376,863

template <class A, class B> inline ostream& operator<<(ostream& st, const pair<A, B>& P) { return st << "(" << P.first << "," << P.second << ")"; };
template <class A, class B> inline pair<A, B> operator+(const pair<A, B>& P, const pair<A, B>& Q) { return pair<A, B>(P.first + Q.first, P.second + Q.second); };
template <class A, class B> inline pair<A, B> operator-(const pair<A, B>& P, const pair<A, B>& Q) { return pair<A, B>(P.first - Q.first, P.second - Q.second); };

#define fs  first
#define sc  second

ll k;
ll a[100005];



ll solve1() {
	int i = k - 1;
	ll ret = 2;
	if (a[i] != 2) {
		return -1;
	}
	--i;

	for (; i >= 0; --i) {
		ll x = a[i];
		ll r = (ret + x - 1) / x * x;
		//if (r / a[i + 1] * a[i + 1] != ret) return -1;
		ret = r;
	}
	ll x = ret;
	rep(j, k) {
		x = x / a[j] * a[j];
	}
	if (x == 2) return ret;
	return -1;
	return ret;
}

ll solve2(ll r) {
	int i = k - 1;
	ll ret = 3;
	if (a[i] != 2) {
		return -1;
	}
	--i;

	for (; i >= 0; --i) {
		ll x = a[i];
		ll r = (ret) / x * x + x-1;
		ret = r;
	}

	ll x = ret;
	rep(j, k) {
		x = x / a[j] * a[j];
	}
	if (x == 2) return ret;
	return -1;
}


ll solve1b() {
	rep(i, 114514) {
		ll x = i;
		rep(j, k) {
			x = x / a[j] * a[j];
		}
		if (x == 2) return i;
	}
	return -1;
}
ll solve2b() {
	Rep(i, 114514) {
		ll x = i;
		rep(j, k) {
			x = x / a[j] * a[j];
		}
		if (x == 2) return i;
	}
	return -1;
}




int main() {
	/*
	k = 4;
	const int N = 14;
	repft(v, 2, N)
		repft(w, 2, N)
		repft(x, 2, N)
		repft(y, 2, N) {
		a[0] = v;
		a[1] = w;
		a[2] = x;
		a[3] = y;
		
		ll r1 = solve1();
		if (r1 != solve1b()) {
			printf("Error A ");
			rep(i, k) cout << a[i] << " ";
			cout << "# " << solve1() << " " << solve1b() << endl;
			//break;
		}
		if (solve2(r1) != solve2b()) {
			printf("Error B ");
			rep(i, k) cout << a[i] << " ";
			cout << "$ " << r1 << "   "<<solve2(r1) << " " << solve2b() << endl;
			//break;
		}
	}
	puts("\nFin");
	*/

	while (cin >> k) {
		rep(i, k) cin >> a[i];

		ll r1 = solve1();
		ll r2 = solve2(r1);

		if (r1 == -1) {
			cout << -1 << endl;
		} else {
			cout << r1 << " " << r2 << endl;
		}
	}
	//for (;;)getchar();

	return 0;
}

Measured memory_bytes: 1024