#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")