#include <iostream>
#include <vector>
#include <map>
using namespace std;
struct range {
int start, end;
range(int s, int e) : start(s), end(e) {}
};
//其实题目思路比较简单,但是边界条件好难控制,不知道有没有什么通用的思路可以简化这类逻辑
int main() {
int n;
cin >> n;
int* a = new int[n];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
int p1 = 0, p2 = 0, ans = -1;
map<int, int> nums;
vector<range*> ranges;
while (p1 < n) {
while (p2 < n && (p1 == p2 || nums.find(a[p2]) == nums.end())) {
nums[a[p2]] = p2;
p2++;
}
int new_ans = p2 - p1;
if (new_ans > ans) {
for (vector<range*>::iterator it = ranges.begin(); it != ranges.end(); it++) {
delete(*it);
}
ranges.clear();
}
if(!(new_ans < ans)) {
range* r = new range(p1 + 1, p2);
ranges.push_back(r);
}
ans = max(ans, new_ans);
int old_p1 = p1;
p1 = p2 == n ? p2 : nums[a[p2]] + 1;
for (int i = old_p1; i < p1; i++) {
nums.erase(a[i]);
}
}
cout << ranges.size() << endl;
for (vector<range*>::iterator it = ranges.begin(); it != ranges.end(); it++) {
cout << (*it) -> start << " " << (*it) -> end << endl;
delete(*it);
}
}