#include <bits/stdc++.h>
using namespace std;
namespace Fastio {
inline int read() {
  int w = 0, x = 0;
  char ch = 0;
  while (!isdigit(ch)) {
    w |= ch == '-';
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = (x << 1) + (x << 3) + (ch ^ 48);
    ch = getchar();
  }
  return w ? -x : x;
}
inline void write(int x) {
  int y(10), len(1);
  while (y <= x) y = (y << 1) + (y << 3), len++;
  while (len--) {
    y /= 10;
    putchar(x / y + 48);
    x %= y;
  }
}
template <class T>
T Min(T x, T y) {
  return (x) < (y) ? (x) : (y);
}
template <class T>
T Max(T x, T y) {
  return (x) < (y) ? (y) : (x);
}
}  // namespace Fastio
using namespace Fastio;
const int Maxn = 200005;
struct Node {
  int v, id;
  bool operator<(const Node &rhs) const { return v + id < rhs.id + rhs.v; }
} a[Maxn];
int n;
int ans[Maxn];
int main() {
  n = read();
  for (register int i = 1; i <= n; i++) a[i].v = read(), a[i].id = i;
  sort(a + 1, a + 1 + n);
  for (register int i = 1; i <= n; i++) {
    ans[i] = a[i].v + a[i].id - i;
    if (ans[i] < ans[i - 1]) {
      printf(":(\n");
      return 0;
    }
  }
  for (int i = 1; i <= n; i++) printf("%d ", ans[i]);
  return 0;
}
