// https://szkopul.edu.pl/problemset/problem/6x4-Pmy-UoyrQpi19NsAz6Rn/site/?key=statement
// 1 etap
// Korale
// ! ! ! ! !
// kod z OKI
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 2e5 + 7;
const int P = 314159;
const int MOD1 = 1e9 + 7;
const int MOD2 = 1e9 + 9;
int arr[MAXN];
int H[MAXN][2];
int H_rev[MAXN][2];
int pow_P[MAXN][2];
// zwraca hash słowa arr[l...r]
pair<int, int> get_hash(int l, int r, int n) {
pair<int, int> res = {(H[r][0] - H[l - 1][0] + MOD1) % MOD1, (H[r][1] - H[l - 1][1] + MOD2) % MOD2};
return {((ll)res.first * pow_P[n - l + 1][0]) % MOD1, ((ll)res.second * pow_P[n - l + 1][1]) % MOD2};
}
// zwraca hash odwróconego słowa arr[l...r]
pair<int, int> get_hash_rev(int l, int r, int n) {
pair<int, int> res = {(H_rev[l][0] - H_rev[r + 1][0] + MOD1) % MOD1, (H_rev[l][1] - H_rev[r + 1][1] + MOD2) % MOD2};
return {((ll)res.first * pow_P[r][0]) % MOD1, ((ll)res.second * pow_P[r][1]) % MOD2};
}
// zwraca liczbę różnych ciągów długości k
int count_distinct(int k, int n) {
set<pair<int, int>> prv_h;
int res = 0;
for (int i = 1; (i + k - 1) <= n; i += k) {
pair<int, int> H_res = get_hash(i, i + k - 1, n);
pair<int, int> H_rev_res = get_hash_rev(i, i + k - 1, n);
// jeżeli nie było słowa ani odwróconego słowa
if (prv_h.find(H_res) == prv_h.end() && prv_h.find(H_rev_res) == prv_h.end()) ++res;
prv_h.insert(H_res);
}
return res;
}
void hash_init(int n) {
pow_P[0][0] = pow_P[0][1] = 1;
for (int i = 1; i <= n; ++i) {
pow_P[i][0] = ((ll)pow_P[i - 1][0] * P) % MOD1;
pow_P[i][1] = ((ll)pow_P[i - 1][1] * P) % MOD2;
}
// liczy hashe
for (int i = 1; i <= n; ++i) {
H[i][0] = ((ll)H[i - 1][0] + (ll)arr[i] * pow_P[i - 1][0]) % MOD1;
H[i][1] = ((ll)H[i - 1][1] + (ll)arr[i] * pow_P[i - 1][1]) % MOD2;
}
// liczy odwrócone hashe
for (int i = n; i >= 1; --i) {
H_rev[i][0] = ((ll)H_rev[i + 1][0] + (ll)arr[i] * pow_P[n - i][0]) % MOD1;
H_rev[i][1] = ((ll)H_rev[i + 1][1] + (ll)arr[i] * pow_P[n - i][1]) % MOD2;
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
for (int i = 1; i <= n; ++i)
cin >> arr[i];
hash_init(n);
int ans = 0;
vector<int> ans_k;
for (int k = 1; k <= n; ++k) {
int c = count_distinct(k, n);
if (c > ans) {
ans = c;
ans_k.clear();
}
if (c == ans) ans_k.push_back(k);
}
cout << ans << ' ' << ans_k.size() << '\n';
for (int i = 0; i < ans_k.size(); ++i)
cout << ans_k[i] << ' ';
cout << '\n';
return 0;
}