#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
void yes() {
  cout << "Yes"
       << "\n";
}
void no() {
  cout << "No"
       << "\n";
}
struct Sync_stdio {
  Sync_stdio() {
    cin.tie(NULL);
    ios_base::sync_with_stdio(false);
  }
} _sync_stdio;
struct FAIL {
  FAIL() {
    cout << "CHANGE!!!"
         << "\n";
  }
};
template <class T>
class FenwickTree {
  int maxn = 1000000;
  vector<T> t;
  T sum(int r) {
    int result = 0;
    for (; r >= 0; r = (r & (r + 1)) - 1) {
      result += t[r];
    }
    return result;
  }
  void init(const vector<T> &a) {
    init((int)a.size());
    for (unsigned i = 0; i < a.size(); ++i) {
      inc(i, a[i]);
    }
  }
  void init(int n) {
    maxn = n;
    t.assign(n, 0);
  }

 public:
  FenwickTree(int n) {
    maxn = n;
    t.resize(maxn);
  }
  T sum(int l, int r) { return sum(r) - sum(l - 1); }
  void update(int i, int delta) {
    for (; i < maxn; i = (i | (i + 1))) {
      t[i] += delta;
    }
  }
};
int main() {
  int n;
  cin >> n;
  vector<int> p(n);
  for (int __i = 0; __i < (n); ++__i) cin >> p[__i];
  ;
  reverse(p.begin(), p.end());
  int maxc = 0;
  vector<int> res;
  res.push_back(1);
  for (int i = (0); i < (n); ++i) {
    maxc = max(maxc, p[i]);
    res.push_back(maxc - i);
  }
  reverse(res.begin(), res.end());
  for (auto __i : res) cout << __i << " ";
  cout << "\n";
  cout.flush();
  ;
  return 0;
}
