Given an array a of length n, find another array, b, of length n such that:

  * for each i (1 ≤ i ≤ n) MEX(\\{b_1, b_2, …, b_i\})=a_i. 



The MEX of a set of integers is the smallest non-negative integer that doesn't belong to this set.

If such array doesn't exist, determine this.

Input

The first line contains an integer n (1 ≤ n ≤ 10^5) — the length of the array a.

The second line contains n integers a_1, a_2, …, a_n (0 ≤ a_i ≤ i) — the elements of the array a. It's guaranteed that a_i ≤ a_{i+1} for 1≤ i < n.

Output

If there's no such array, print a single line containing -1.

Otherwise, print a single line containing n integers b_1, b_2, …, b_n (0 ≤ b_i ≤ 10^6)

If there are multiple answers, print any.

Examples

Input


3
1 2 3


Output


0 1 2 

Input


4
0 0 0 2


Output


1 3 4 0 

Input


3
1 1 3


Output


0 2 1 

Note

In the second test case, other answers like [1,1,1,0], for example, are valid.
			//////////////////////
        	//******************//
			//**  OM THUMMAR  **//
			//**  DA-IICT     **//
			//**  201901070   **//
			//**  I'D=Aom2608 **//
			//******************//
			/////////////////////

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;

#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define endl "\n"
#define Max(x,y,z) max(x,max(y,z))
#define Min(x,y,z) min(x,min(y,z))
#define fr(i,s,e) for(i=s;i<e;i++)
#define rf(i,s,e) for(i=s-1;i>=e;i--)
#define pb push_back
#define mp make_pair
#define F first
#define S second
#define mod 1000000007
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<long long, long long> pll;
typedef vector<int> vi;
typedef vector<long long> vll;
typedef vector<pair<long long,long long> > vpll;


#define PI 3.141592653589793
#define MOD 1000000007



int main()
{
	IOS;
	multiset<ll>  m;
	ll n;
	cin>>n;
	ll a[n],cnt[n]={0};
	for(ll i=0;i<n;i++)  cin>>a[i];
	for(ll i=0;i<n;i++)
	{
		cnt[a[i]]++;
		
	}
	for(ll i=0;i<n;i++)
	{
		m.insert(i);
	}
	vll v;
	for(ll i=0;i<n;i++)
	{
		for(auto it: m)
		{
			ll x=it;
			if(cnt[x]==0)
			{
				v.pb(x);
				m.erase(x);
				break;
			}
		}
		cnt[a[i]]--;
	}
	for(ll i=0;i<n;i++)
	{
		cout<<v[i]<<" ";
	}
	cout<<endl;
	
}



