#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n; // Số lượng thanh gỗ
vector<int> lengths(n); // Độ dài của các thanh gỗ
// Nhập độ dài của các thanh gỗ
for (int i = 0; i < n; ++i) {
cin >> lengths[i];
}
// Sắp xếp các thanh gỗ theo thứ tự tăng dần
sort(lengths.begin(), lengths.end());
int max_side = -1; // Độ dài cạnh hình vuông lớn nhất có thể tạo ra
int num_squares = 0; // Số lượng hình vuông tạo được
// Duyệt qua từng cạnh potentional của hình vuông (từ 1 đến độ dài của thanh gỗ nhỏ nhất)
for (int side = 1; side <= lengths[0]; ++side) {
// Kiểm tra xem có thể tạo được hình vuông có cạnh là side không
bool possible = true;
for (int length : lengths) {
if (length % side != 0) {
possible = false;
break;
}
}
// Nếu có thể tạo được hình vuông, cập nhật thông tin
if (possible) {
num_squares = max_element(lengths.begin(), lengths.end()) - lengths.begin();
max_side = side;
}
}
// Tính diện tích của hình vuông lớn nhất và số lượng hình vuông tạo được
int max_area = (max_side != -1) ? max_side * max_side : -1;
// In kết quả
cout << max_area << " " << num_squares << endl;
return 0;
}