#include <iostream>
#include <vector>
#include <unordered_set>
#include <algorithm>
using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> a(n);
    vector<pair<int,int>> all;
    unordered_set<int> used;
    int begin = 0;
    for(auto i = 0; i <n; i++) {
        int v;
        cin >> v;
        a[i] = v;
        if(used.find(v) != used.end()) {
            all.emplace_back(begin+1, i - begin-1);
            for(auto j = begin; j < i; j++) {
                used.erase(a[j]);
                if(a[j] == v) {
                    begin = j+1;
                    break;
                }
            }
        }
        used.insert(v);
    }
    all.emplace_back(begin+1, n-begin-1);
    sort(all.begin(), all.end(), [](pair<int,int>& l, pair<int,int>& r)->bool {
        if(l.second == r.second) {
            return l.first < r.first;
        }
        return l.second > r.second;
    });
    auto top = all.front();
    auto l = top.second;
    int cnt = 0;
    for(auto& v : all) {
        if( v.second < l) {
            break;
        }
        cnt++;
    }
    cout << cnt << endl;
    for(auto i = 0; i < cnt; i++) {
        auto& v = all[i];
        cout << v.first << " " << v.first + v.second << endl;
    }
}
// 64 位输出请用 printf("%lld")