#include <bits/stdc++.h>
using namespace std;
inline long long getnum() {
  long long now = 0;
  long long fh = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') fh = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    now = (now << 3) + (now << 1) + ch - '0';
    ch = getchar();
  }
  return now * fh;
}
struct seg {
  struct P {
    int left, right, ans;
  } t[1200000];
  void built(int l, int r, int now) {
    t[now].left = l;
    t[now].right = r;
    t[now].ans = 0;
    int mid = (l + r) >> 1;
    if (l != r) {
      built(l, mid, now << 1);
      built(mid + 1, r, now << 1 | 1);
    }
  }
  void insert(int pos, int val, int now) {
    if (t[now].left == t[now].right) {
      t[now].ans = val;
      return;
    }
    int mid = (t[now].left + t[now].right) / 2;
    if (mid >= pos)
      insert(pos, val, now << 1);
    else
      insert(pos, val, now << 1 | 1);
    t[now].ans = min(t[now << 1].ans, t[now << 1 | 1].ans);
  }
  void find(int l, int r, int &ans, int now) {
    if (l <= t[now].left && r >= t[now].right) {
      ans = min(ans, t[now].ans);
      return;
    }
    int mid = (t[now].left + t[now].right) / 2;
    if (l > mid)
      find(l, r, ans, now * 2 + 1);
    else if (r <= mid)
      find(l, r, ans, now * 2);
    else {
      find(l, mid, ans, now * 2);
      find(mid + 1, r, ans, now * 2 + 1);
    }
  }
} s;
int n, c;
int main() {
  n = getnum();
  s.built(1, n, 1);
  printf("1 ");
  for (int i = 1; i <= n; i++) {
    c = getnum();
    s.insert(c, 1, 1);
    int l = 0;
    int r = n + 1;
    int mid = (n + 1) >> 1;
    int ans = 1;
    int tmp = 1;
    s.find(n, n, tmp, 1);
    if (tmp == 0) {
      printf("%d ", i + 1);
      continue;
    }
    while (r - l > 1) {
      tmp = 1;
      mid = (l + r) >> 1;
      s.find(mid, n, tmp, 1);
      if (tmp == 1) {
        r = mid;
        ans = i - (n - mid);
      } else {
        l = mid;
      }
    }
    printf("%d ", ans);
  }
  return 0;
}
