/*
f(1) 1
f(2) 2
f(3) 4
f(4) 7
f(5) 13
f(6) 24
*/
/*
#include <stdio.h>
int memo[100001]={0};
int f(int a)
{
if(memo[a]!=0) return memo[a];
if(a==1) return 1;
if(a==2) return 2;
if(a==3) return 4;
return memo[a]=(f(a-2)+f(a-1)+f(a-3))%1000;
}
int main()
{
int n;
scanf("%d",&n);
printf("%d",f(n));
}
//구조체 struct : 사용자 정의 자료형
// 내가 정하는 자료형
//정수 실수 문자
/*
#include <stdio.h>
typedef struct
{
int a;
float b;
char name;
}box;
int main()
{
box t;
t.a =15;
scanf("%f",&t.b);
printf("%d %f", t.a, t.b);
box arr[50]; // arr[0] ~ arr[49]
int i;
for(i=1;i<=10;i++)
{
scanf("%d %f",&arr[i].a,&arr[i].b);
}
return 0;
}
*/
#include <stdio.h>
typedef struct
{
int a; //점수
int b; //석차
}box;
int main()
{
int i,j,n;
box arr[201];
int c=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&arr[i].a);
}
//등수 구하기
for(i=1;i<=n;i++)
{
// arr[i]의 등수 구하기
c=0;
for(j=1;j<=n;j++)
{
if(arr[i].a<arr[j].a)
{
c++;
}
}
arr[i].b=c+1;
}
for(i=1;i<=n;i++)
{
printf("%d %d\n",arr[i].a,arr[i].b);
}
}