#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
const int M = 1e9 + 7;
pii combine(const pii &a, const pii &b) {
if (a.first < b.first)
return b;
if (a.first > b.first)
return a;
return {a.first, (a.second + b.second) % M};
}
struct Seg {
int n;
vector<pii> t;
Seg(int n_) : n(n_), t(2 * n) {}
void set(int i, pii v) {
i += n;
t[i] = combine(t[i], v);
while (i /= 2)
t[i] = combine(t[2 * i], t[2 * i + 1]);
}
pii query(int l, int r) {
pii ret = {0, 1};
for (l += n, r += n; l < r; l /= 2, r /= 2) {
if (l % 2)
ret = combine(ret, t[l++]);
if (r % 2)
ret = combine(ret, t[--r]);
}
return ret;
}
};
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<int> a(n);
map<int, int> cc;
for (int &i : a) {
cin >> i;
cc[i];
}
int cnt = 0;
for (auto &[k, v] : cc)
v = cnt++;
for (int &i : a)
i = cc[i];
vector<int> p2(n);
p2[0] = 1;
for (int i = 1; i < n; i++)
p2[i] = 2 * p2[i - 1] % M;
Seg inc(cnt), dec(cnt);
pii ans = {0, 0};
for (int i = n - 1; i >= 0; i--) {
pii qinc = inc.query(a[i] + 1, cnt), qdec = dec.query(0, a[i]);
qinc.first++, qdec.first++;
int len = qinc.first + qdec.first - 1;
ans = combine(
ans, {len, int((ll)p2[n - len] * qinc.second % M * qdec.second % M)});
inc.set(a[i], qinc);
dec.set(a[i], qdec);
}
cout << ans.first << ' ' << ans.second << '\n';
}