#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdio>

using namespace std;

#define ll long long
#define FAST ios_base::sync_with_stdio(false); cin.tie(NULL);
#define FILE if (fopen("perfect.inp", "r")) { freopen("perfect.inp", "r", stdin); freopen("perfect.out", "w", stdout); }
#define int long long
#define pb push_back

const int M = 100005;
const int K = 1000005;
int n;
int a[2 * M];
int p[K];
int d[K];
int l[K];

void s() {
    for (int i = 2; i < K; ++i) {
        if (p[i] == 0) {
            for (int j = i; j < K; j += i) {
                if (p[j] == 0) p[j] = i;
            }
        }
    }
}

vector<int> g(int x) {
    vector<int> r;
    while (x > 1) {
        int f = p[x];
        r.pb(f);
        while (x % f == 0) x /= f;
    }
    return r;
}

signed main() {
    FAST;
    FILE;

    s();

    if (!(cin >> n)) return 0;

    for (int i = 1; i <= n; ++i) {
        cin >> a[i];
    }

    int m = 0;
    int w = 0;

    for (int i = 1; i <= n; ++i) {
        vector<int> v = g(a[i]);
        for (int x : v) {
            if (l[x] == i - 1) {
                d[x]++;
            } else {
                d[x] = 1;
            }
            l[x] = i;
            m = max(m, d[x]);
        }
    }

    if (m == 0) {
        cout << "0 0\n";
        return 0;
    }

    for (int i = 0; i < K; ++i) {
        d[i] = 0;
        l[i] = 0;
    }

    for (int i = 1; i <= n; ++i) {
        vector<int> v = g(a[i]);
        for (int x : v) {
            if (l[x] == i - 1) {
                d[x]++;
            } else {
                d[x] = 1;
            }
            l[x] = i;
            
            if (d[x] == m) {
                w++;
            }
        }
    }

    cout << m << " " << w << "\n";

    return 0;
}
