/*
#include <stdio.h>
long long int n;
long long int f(long long int n)
{
long long int s=0,d;
while(1)
{
d=n%10;
n=n/10;
s=s*10+d;
if(n==0) return s;
}
}
int main()
{
scanf("%lld", &n);
printf("%lld\n", f(n));
}
*/
/*
#include <stdio.h>
int gcd(int p, int q)
{
if(p==0) return q;
return gcd(q%p, p);
}
long long int lcm(int a,int b)
{
long long int d=a,f=b,c;
c=d*f/gcd(a,b);
return c;
}
int main()
{
int a, b;
scanf("%d%d", &a, &b);
printf("%lld\n", lcm(a, b));
}
*/
/*
#include <stdio.h>
int a, n;
long long int pow(int a,int n)
{
long long int s=1,m,w;
int i,q;
if(n>=10)
{
w=a*a*a*a*a;
m=n/5;
q=n%5;
for(i=1; i<=m; i++)
{
s=s*w;
}
for(i=1; i<=q; i++)
{
s=s*a;
}
}
else
for(i=1; i<=n; i++)
{
s=s*a;
}
return s;
}
int main()
{
scanf("%d%d", &a, &n);
printf("%lld\n", pow(a, n));
}
*/
/*
#include <stdio.h>
int n, k, d[1010];
int upper_bound(int k)
{
int i;
for(i=1;i<=n;i++)
{
if(k<d[i]) return i;
}
return n+1;
}
int main()
{
scanf("%d", &n);
for(int i=1; i<=n; i++)
scanf("%d", &d[i]);
scanf("%d", &k);
printf("%d\n", upper_bound(k));
}
구조체 (struct) :사용자 정의 자료형
내가 만드는 자료형
ex) 학생 100명의 나이(정수)와 성적(문자)을 관리
int age[100];
char grade[100];
*/
/*
#include <stdio.h>
typedef struct
{
// 멤버 or 필드
char name[50];
int age;
char grade;
}myint;
int main()
{
// myint a;
// scanf("%d %c",&a.age, &a.grade);
myint arr[100];
myint temp;
arr[0].age ~ arr[99].age
3번학생과 5번학생의 내용 교환
temp = arr[3];
arr[3] = arr[5];
arr[5] = temp;
return 0;
}
*/
/*
#include <stdio.h>
#include <string.h>
typedef struct
{
char name[110];
int grade;
} st;
int main()
{
int n,m,i,j,k=1,p[110]={};
st s[110];
scanf("%d %d",&n,&m);
for(i=1; i<=n; i++)
{
scanf("%s %d",s[i].name,&s[i].grade);
}
for(j=100; j>=0; j--)
{
for(i=1; i<=n; i++)
{
if(s[i].grade==j)
{
p[k]=i;
k++;
}
}
}
for(i=1;i<=m;i++)
{
printf("%s\n",s[p[i]].name);
}
}
*/
/*
#include <stdio.h>
#include <string.h>
typedef struct
{
char name[110];
int grade1,grade2,grade3;
} st;
int main()
{
int n,i,j,t=1,k=0,y=0,g2[110]={},g3[110]={};
st s[110];
scanf("%d",&n);
for(i=1; i<=n; i++)
{
scanf("%s %d %d %d",s[i].name,&s[i].grade1,&s[i].grade2,&s[i].grade3);
}
for(i=1;i<=n;i++)
{
if(s[i].grade1>s[k].grade1) k=i;
}
for(j=100; j>=0; j--)
{
for(i=1; i<=n; i++)
{
if(s[i].grade2==j)
{
g2[i]=t;
y++;
}
}
if(y>0)
{
t+=y;
y=0;
}
}
t=1;
for(j=100; j>=0; j--)
{
for(i=1; i<=n; i++)
{
if(s[i].grade3==j)
{
g3[i]=t;
y++;
}
}
if(y>0)
{
t+=y;
y=0;
}
}
printf("%s %d %d",s[k].name,g2[k],g3[k]);
}
*/
#include<stdio.h>
typedef struct
{
int grade;
} sc;
int main()
{
sc g[210]={};
int s[110]={};
int n,i,j,y=0,t=1;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&g[i].grade);
}
for(j=100; j>=0; j--)
{
for(i=1; i<=n; i++)
{
if(g[i].grade==j)
{
s[i]=t;
y++;
}
}
if(y>0)
{
t+=y;
y=0;
}
}
for(i=1;i<=n;i++)
{
printf("%d %d\n",g[i].grade,s[i]);
}
}