#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);
	} 
}