#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int maxn = 200011;
const int INF = 1 << 25;
const int logN = 18;
int n;
int a[maxn];
bool p[maxn];
int b[maxn];
bool used[maxn];
int main(int argc, char const *argv[]) {
  scanf("%d", &(n));
  for (int(i) = 0; i < (int)(n); ++(i)) scanf("%d", &(a[i]));
  priority_queue<pair<int, int> > pq1, pq2;
  for (int(i) = 0; i < (int)(n); ++(i))
    pq1.push(make_pair((a[i] - (n - i)), (i)));
  for (int i = n - 1; i >= 0; --i) {
    while (!pq1.empty() && pq1.top().second > i) pq1.pop();
    while (!pq1.empty() && used[pq1.top().second]) pq1.pop();
    while (!pq2.empty() && used[pq2.top().second]) pq2.pop();
    int id1 = -1, id2 = -1;
    if (!pq1.empty()) id1 = pq1.top().second;
    if (!pq2.empty()) id2 = pq2.top().second;
    int pick;
    if (id1 != -1 && id2 != -1) {
      if (a[id1] - i + id1 > a[id2] - i + id2) {
        pick = id1;
        pq1.pop();
      } else {
        pick = id2;
        pq2.pop();
      }
    } else if (id1 != -1) {
      pick = id1;
      pq1.pop();
    } else {
      pick = id2;
      pq2.pop();
    }
    if (pick > i)
      b[i] = a[pick] - i + pick;
    else
      b[i] = a[pick] - i + pick;
    used[pick] = 1;
    if (!used[i]) pq2.push(make_pair((a[i] + i), (i)));
  }
  bool f = 1;
  for (int(i) = 0; i < (int)(n - 1); ++(i))
    if (b[i] > b[i + 1]) f = 0;
  if (f)
    for (int(i) = 0; i < (int)(n); ++(i))
      printf("%d%c", b[i], i == n - 1 ? '\n' : ' ');
  else
    puts(":(");
}
