#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int top;
int max;
}node;
int main()
{void shuru(int num[],int n);
void shuchu(int num[],int n);
int inc (const void * a,const void *b);
int abs(int a,int b);
int inc1(const void *a, const void *b);
int min(struct node arr[],int n,int flag);
int n;
scanf("%d",&n);
int num[100];
shuru(num,n);
qsort(num, n, sizeof(int), inc);
shuchu(num,n);
struct node arr[100];
for(int i=0;i<n-1;i++)
{
arr[i].max=abs(num[i],num[i+1]);
arr[i].top=i;
}
qsort(arr, n-1, sizeof(node), inc1);
for(int i=0;i<n-1;i++)
printf("%d %d",arr[i].max,arr[i].top);
int end=min(arr,n-1,arr[0].max);
for(int i=0;i<end;i++)
printf("%d %d\n",arr[i].top,arr[i+1].top);
}
void shuru(int num[],int n)
{
for(int i=0;i<n;i++)
scanf("%d",&num[i]);
}
void shuchu(int num[],int n)
{
for(int i=0;i<n;i++)
printf("%d ",num[i]);
printf("\n");
}
int inc (const void * a,const void *b)
{
return * (int * )a-* (int *)b;
}
int abs(int a,int b)
{
if(a-b<0)
return b-a;
else
return a-b;
}
int inc1(const void *a, const void *b)
{
if((* (node *)a).max != ( * (node *)b).max)
return ( * (node * )a).max > ( * (node * )b).max ? 1 : -1;
else return (* (node * )a).top -( * (node * )b).top;
}
int min(struct node arr[],int n,int flag)
{ int ret=0;
for(int i=0;i<n;i++)
{
if(flag<arr[i].max)
{
ret=i;
break;
}
}
return ret;
}