#include <iostream>
#include <bits/stdc++.h>

#define int long long
#define endl '\n'
#define inf 2000000000000000000
#define random (rand()^(rand()<<15))

using namespace std;
constexpr int mod=1000000007;
constexpr int MOD=998244353;
mt19937 rnd(time(nullptr));

struct item
{
    item *l,*r;
    int val,prior,cnt,mn,mnind;
    bool rev;
    item(int x)
    {
        val=mn=x;
        mnind=1;
        prior=rnd();
        cnt=1;
        rev=0;
        l=0;r=0;
    }
    item(){}
};

typedef item *pitem;
typedef pair<pitem,pitem> Pair;

int cnt(pitem x)
{
    return x?x->cnt:0;
}
int mn(pitem x)
{
    return x?x->mn:inf;
}
int mnind(pitem x)
{
    return x?x->mnind:inf;
}
void upd_cnt(pitem&x)
{
    if(x)
    {
        x->cnt=cnt(x->l)+x->val+cnt(x->r);
        x->mnind=cnt(x->l)+1;
        if(mn(x->l)<=x->val)
        {
            x->mnind=x->l->mnind;
        }
        if(mn(x->r)<x->val)
        {
            x->mnind=x->r->mnind;
        }
        x->mn=min({mn(x->l),mn(x->r),x->val});
    }
}
void push(pitem&x)
{
    if(x&&x->rev)
    {
        swap(x->l,x->r);
        x->rev=0;
        if(x->l)
        {
            x->l->rev^=1;
        }
        if(x->r)
        {
            x->r->rev^=1;
        }
    }
}
void Dfs(pitem&v)
{
    push(v);
    if(!v)
    {
        return;
    }
    Dfs(v->l);
    cout<<v->val<<" "<<v->mnind<<" "<<v->mn<<endl;
    Dfs(v->r);
}
pitem Merge(pitem l,pitem r)
{
    push(l);push(r);
    if(!l||!r)
    {
        return l?l:r;
    }
    if(l->prior>r->prior)
    {
        l->r=Merge(l->r,r);
        upd_cnt(l);
        return l;
    }
    else
    {
        r->l=Merge(l,r->l);
        upd_cnt(r);
        return r;
    }
}
Pair Split(pitem v,int k)
{
    if(!v)
    {
        return{0,0};
    }
    push(v);
    if(k<=cnt(v->l))
    {
        Pair t=Split(v->l,k);
        v->l=t.second;
        upd_cnt(v);
        return{t.first,v};
    }
    else
    {
        Pair t=Split(v->r,k-cnt(v->l)-1);
        v->r=t.first;
        upd_cnt(v);
        return{v,t.second};
    }
}
void Insert(pitem&v,int x)
{
    pitem nd=new item(x);
    v=Merge(nd,v);
}
pair<int,int>get_mn(pitem&v,int l,int r)
{
    Pair t=Split(v,r);
    Pair q=Split(t.first,l-1);
    pair<int,int>res={mn(q.second),mnind(q.second)};
    v=Merge(q.first,Merge(q.second,t.second));
    return res;
}
void Reverse(pitem&v,int l,int r)
{
    Pair t=Split(v,r);
    Pair q=Split(t.first,l-1);
    q.second->rev^=1;
    v=Merge(q.first,Merge(q.second,t.second));
}

void solve()
{
    int n;
    cin>>n;
    pitem rt=0;
    for(int i=0;i<n;i++)
    {
        int x;
        cin>>x;
        Insert(rt,x);
    }
    Reverse(rt,1,n);
    // Dfs(rt);
    // cout<<endl;
    vector<pair<int,int>>v;
    // for(int i=1;i<=n;i++)
    // {
    //     for(int j=i;j<=n;j++)
    //     {
    //         pair<int,int>q=get_mn(rt,i,j);
    //         cout<<i<<" "<<j<<" "<<q.first<<" "<<q.second<<endl;
    //     }
    // }
    cout<<1<<endl<<1<<" "<<n<<endl;
}

int32_t main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int t=1;
//    cin>>t;
    for(int _=1;_<=t;_++)
    {
        solve();
    }
}
