#include<bits/stdc++.h>
using namespace std;
struct Node{
    int z,b;double t,p;
    bool operator <(const Node a)const{
        if(t==a.t)return p<a.p;
        return t<a.t;
    }    
};
struct Nd{int b;double a;};
int n,b,x,c,Z[10010],B[10010];double a;
vector<Nd>V[110];
priority_queue<Node>Q;
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d%d",&a,&b);
        V[b].push_back((Nd){i,a});
    }
    for(int i=2;i<=100;i++)for(int j=0;j<V[i].size();j++)
    for(int u=i-1;u>=1;u--)for(int v=V[u].size()-1;v>=0;v--)
        if(V[i][j].a<V[u][v].a){
            x++;
            double t=(V[u][v].a-V[i][j].a)/(i-u),p=V[u][v].a+u*t;
            Q.push((Node){V[i][j].b,V[u][v].b,t,p});
            if(Q.size()>10000)Q.pop();
        }
    while(!Q.empty()){c++;Z[c]=Q.top().z;B[c]=Q.top().b;Q.pop();}
    printf("%d\n",x);
    for(int i=c;i>=1;i--)printf("%d %d\n",Z[i],B[i]);
    return 0;
}
/*
7
3 8
4 2
5 1
6 7
7 8
9 7
10 8
*/

/**************************************************************
	Problem: 1757
	User: admin
	Language: C++
	Result: Accepted
	Time:4 ms
	Memory:2156 kb
****************************************************************/