#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 105;
int n, k[N], f[N][16][16];
ll ans[N][16][16];
void solve() {
cin >> n;
for (int i = 1; i <= n; i++) cin >> k[i];
memset(f, -1, sizeof f);
for (int c = 0; c < 16; c++) {
if (k[1] > 0 && ((c >> (k[1] - 1)) & 1)) continue;
f[1][c][0] = __builtin_popcount(c);
ans[1][c][0] = 1;
}
for (int i = 2; i <= n; i++)
for (int c = 0; c < 16; c++) {
if (k[i] > 0 && ((c >> (k[i] - 1)) & 1)) continue;
int cnt = __builtin_popcount(c);
for (int p = 0; p < 16; p++) {
if (((p << 2) & c) || ((p >> 2) & c)) continue;
for (int pp = 0; pp < 16; pp++) {
if (f[i - 1][p][pp] == -1) continue;
if (((pp << 1) & c) || ((pp >> 1) & c)) continue;
int val = f[i - 1][p][pp] + cnt;
if (f[i][c][p] < val) {
f[i][c][p] = val;
ans[i][c][p] = ans[i - 1][p][pp];
} else if (f[i][c][p] == val) ans[i][c][p] += ans[i - 1][p][pp];
}
}
}
int M = -1; ll L = 0;
for (int c = 0; c < 16; c++)
for (int p = 0; p < 16; p++)
if (M < f[n][c][p]) {
M = f[n][c][p];
L = ans[n][c][p];
} else if (M == f[n][c][p]) L += ans[n][c][p];
cout << M << " " << L << "\n";
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
#define TASK "NGHT"
if (fopen(TASK".INP", "r")) {
freopen(TASK".INP", "r", stdin);
freopen(TASK".OUT", "w", stdout);
}
int tests = 1; // cin >> tests;
while (tests--) solve();
#ifndef ONLINE_JUDGE
cerr << "\nTime elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
return 0;
}