#include <iostream>
#include<bits/stdc++.h>

using namespace std;

// int mex(vector<int> &arr){
// 	int ans=0;
// 	int n=arr.size();
// 	unordered_map<int,int> mpp;
	
// 	for(int i=0;i<n;i++){
// 		mpp[arr[i]]++;
// 		while(mpp.find(ans)!=mpp.end()){
// 			ans++;
// 		}
// 	}
// 	return ans;
	
// }

int main() {
	// your code goes here
	int n;
	cin>>n;
	vector<int> arr(n);
	for(int i=0;i<n;i++){
		cin>>arr[i];
	}
	
	vector<int> suffix(n,0);
	vector<int> answer(n,0);
	vector<int> result;
	
	
    int mex=0;
    unordered_map<int,int> mpp;
    
     
	for(int i=n-1;i>=0;i--){
		mpp[arr[i]]++;
		while(mpp.find(mex)!=mpp.end()){
			mex++;
		}
		suffix[i]=mex;
	}
	answer[n-1]=n-1;
	mpp.clear();
    mpp[arr[n-1]]++;
    
	for(int i=n-2;i>=0;i--){
		mpp[arr[i]]++;
		
		if(suffix[i]==suffix[i+1]){
			int j=answer[i+1];
			while(true){
				mpp[arr[j]]--;
				if(mpp[arr[j]]==0){
					mpp[arr[j]]++;
					break;
				}
				else{
					j--;
				}
			}
			answer[i]=j;
		}
		else{
			answer[i]=answer[i+1];
		}
	}
	
	int j=0;
	while(j<n){
		int a = suffix[j];
		result.push_back(a);
		j = answer[j]+1;
		
	}
	
	for(int i=0;i<result.size();i++){
		cout<<result[i]<<endl;
		
	}
	

	
	
	return 0;
}