#include <bits/stdc++.h>
using namespace std;
const int maxn = 3e5 + 5;
const long long mod = LLONG_MAX;
struct edge {
  int from, to;
  edge(int f, int t) { from = f, to = t; }
};
long long n, m;
struct node {
  long long cost;
  int p;
  node(int c = -1, int pp = 0) {
    cost = c;
    p = pp;
  }
  bool operator>(const node& t) const { return cost < t.cost; }
};
bool cmp1(node x, node y) { return x.cost > y.cost; }
long long ans = mod;
inline long long gcd(long long x, long long y) {
  return y == 0 ? x : gcd(y, x % y);
}
int a[maxn];
bool vis[maxn];
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
  }
  printf("1 ");
  int k = n;
  for (int i = 1; i <= n; i++) {
    vis[a[i]] = 1;
    while (vis[k]) k--;
    printf("%d ", k - n + i + 1);
  }
  return 0;
}
