Professor GukiZ likes programming contests. He especially likes to rate his students on the contests he prepares. Now, he has decided to prepare a new contest. 

In total, *n* students will attend, and before the start, every one of them has some positive integer rating. Students are indexed from 1 to *n*. Let's denote the rating of *i*-th student as *a*<sub class="lower-index">*i*</sub>. After the contest ends, every student will end up with some positive integer position. GukiZ expects that his students will take places according to their ratings. 

He thinks that each student will take place equal to <img align="middle" class="tex-formula" src="https://espresso.codeforces.com/8525cafdf358474b435e5d3d9562e6bc3bbbe6c5.png" style="max-width: 100.0%;max-height: 100.0%;"/>. In particular, if student *A* has rating strictly lower then student *B*, *A* will get the strictly better position than *B*, and if two students have equal ratings, they will share the same position. 

GukiZ would like you to reconstruct the results by following his expectations. Help him and determine the position after the end of the contest for each of his students if everything goes as expected.
The first line contains integer *n* (1 ≤ *n* ≤ 2000), number of GukiZ's students. 

The second line contains *n* numbers *a*<sub class="lower-index">1</sub>, *a*<sub class="lower-index">2</sub>, ... *a*<sub class="lower-index">*n*</sub> (1 ≤ *a*<sub class="lower-index">*i*</sub> ≤ 2000) where *a*<sub class="lower-index">*i*</sub> is the rating of *i*-th student (1 ≤ *i* ≤ *n*).
# đọc vào dữ kiện của đề
n = int(input())
a = list(map(int,input().split()))

# sort list a
b_sort = sorted(a, reverse = True)

def gukiz_and_contest(n,a, b_sort):
  # tạo 1 list position với các phần tử đều là 1 để lưu kết quả vào
  #  tạo biến position để đánh dấu lại vị trí
  position_list = [1]*n
  position = 1
  #  chạy vòng lặp với mảng b đã được sort theo thứ tự giảm dần
  for i in range (n):
  #  nếu là phần tử đầu tiên của mảng b_sort thì sẽ có kết quả là vị trí 1, không cần cập nhật vì ban đầu list positon đc tạo ra toàn là số 1 hoặc phần tử sau = phần tử trước cũng không cần cập nhật.
    if i == 0 or b_sort[i] == b_sort[i-1]:
      continue
    # tất cả cập nhật đều làm ở bước này:
    # lặp qua list a ban đầu, những chỗ nào trong a giống với b_sort[i] thì có cùng vị trí nên ta lặp đến hết dãy chỗ nào giống thay vào.
    else:
      position = i+1
      pointer_a = 0
      while pointer_a < n:
        if a[pointer_a] == b_sort[i]:
          position_list[pointer_a] = position
        pointer_a += 1
  return position_list

result = gukiz_and_contest(n,a,b_sort)
for x in result:
  print(x, end=" ")


  