#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
int main() {
//读入数据
int n;
cin >> n;
vector<int> a(n);
for(int i = 0; i < n; i++){
cin >> a[i];
}
vector<pair<int,int>> res;//存储结果区间的序列
unordered_map<int, int> rem;//记录元素是否存在以及存在的位置
int size = 0;//记录窗口最大大小
//滑动窗口算法
int left = 0;
for(int right = 0; right < n; right++){
//更新窗口和元素出现位置
if(rem.count(a.at(right)) && rem[a.at(right)] >= left){//如果right指向元素出现过且在窗口内,则右移left并更新rem
left = rem[a.at(right)] + 1;
rem[a.at(right)] = right;
}
else{
rem[a.at(right)] = right;
}
int s = right - left + 1;//记录当前窗口大小
//根据情况更新最大窗口的区间
if(s > size){
size = s;
res.clear();
res.emplace_back(left,right);
}
else if(s == size){
res.emplace_back(left,right);
}
}
//打印结果
int m = res.size();
cout << m << endl;
for(int i = 0; i < m; i++){
cout << res.at(i).first + 1 << " " << res.at(i).second + 1 << endl;
}
return 0;
}
// 64 位输出请用 printf("%lld")