#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef   long long int ll;
typedef long double db;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;

#define ordered_set tree<ll, null_type,less<ll>, rb_tree_tag,tree_order_statistics_node_update>
#define pll pair<ll,ll>
#define pb push_back
#define eb emplace_back
#define mp make_pair
#define ub(v,val) upper_bound(v.begin(),v.end(),val)
#define np(str) next_permutation(str.begin(),str.end())
#define lb(v,val) lower_bound(v.begin(),v.end(),val)
#define sortv(vec) sort(vec.begin(),vec.end())
#define rev(p) reverse(p.begin(),p.end());
#define v vector
#define pi 3.14159265358979323846264338327950288419716939937510
#define len length()
#define repc(i,s,e) for(ll i=s;i<e;i++)
#define fi first
#define se second
#define mset(a,val) memset(a,val,sizeof(a));
#define mt make_tuple
#define repr(i,n) for(i=n-1;i>=0;i--)
#define rep(i,n) for(i=0;i<n;i++)
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define at(s,pos) *(s.find_by_order(pos))
#define set_ind(s,val) s.order_of_key(val)
long long int M = 1e9 + 7 ;
long long int inf = 9 * 1e18;
//CLOCK
ll begtime = clock();
#define time() cout << "\n\nTime elapsed: " << (clock() - begtime)*1000/CLOCKS_PER_SEC << " ms\n\n";
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
//CLOCK ENDED
ll n, m;
// modular exponentiation
ll binpow(ll val, ll deg)
{
	if (deg < 0)
		return 0;
	if (!deg)
		return 1 % M;
	if (deg & 1)
		return binpow(val, deg - 1) * val % M;
	ll res = binpow(val, deg >> 1);
	return (res * res) % M;
}
//binomial
ll modinv(ll n) {
	return binpow(n, M - 2);
}
//GCD
ll gcd (ll a, ll b) {
	if (b == 0)
		return a;
	else
		return gcd (b, a % b);
}

int main() {
	// your code goes here
	IOS;
#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
#endif
	ll i, j, t, k, x, y, z,  N;
	cin >> n;
	ll a[n];
	ll pos[n + 1];
	rep(i, n) {
		cin >> a[i];
		pos[a[i]] = i;
	}
	ll used[n];
	mset(used, 0);
	v<ll> out;
	ll flg = 0;
	for (i = n; i >= 1; i--) {
		x = pos[i];
		while (1) {
			if (x + 1 < n) {
				if (a[x + 1] > a[x]) {
					break;
				}
				else {
					if (used[x]) {
						flg = 1;
						break;
					}
					else {
						used[x] = 1;
						out.pb(x + 1);
						swap(a[x], a[x + 1]);
						pos[a[x]] = x;
						pos[a[x + 1]] = x + 1;
						x++;
					}
				}
			}
			else break;
		}
	}
	if (flg) cout << -1;
	else {
		ll flg = 0;
		rep(i, n) {
			if (a[i] != i + 1) flg = 1;
			break;
		}
		if (flg) {
			cout << -1;
		}
		else {
			if (out.size() != n - 1) cout << -1;
			else
				rep(i, out.size()) cout << out[i] << '\n';
		}
	}





	return 0;


}


























#include <bits/stdc++.h>

using namespace std;

const int N = 200010;

int n, p[N];

int main() {
  cin >> n;
  for (int i = 1; i <= n; ++i) {
    scanf("%d", p + i);
  }
  vector <int> ans;
  for (int i = n; i >= 1; --i) {
    if (p[i] == i) continue;
    int at = -1;
    for (int j = i - 1; j >= 1; --j) if (p[j] == i) {
      at = j;
      break;
    }
    for (int j = at; j < i; ++j) {
      ans.emplace_back(j);
      swap(p[j], p[j + 1]);
    }
    for (int j = at + 1; j <= i; ++j) {
      if (p[j] != j) {
        cout << "-1\n";
        return 0;
      }
    }
    i = at + 1;
  }
  for (int i = 1; i <= n; ++i) {
    if (p[i] != i) {
      cout << "-1\n";
      return 0;
    }
  }
  if (ans.size() != n - 1) {
    cout << "-1\n";
    return 0;
  }
  for (int x : ans) printf("%d\n", x);
  return 0;
}


