#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 * 2 + 111;
long long a[maxn];
long long t[maxn];
bool used[maxn];
void build(int v , int tl, int tr){
	if(tl == tr){
		t[v] = a[tl];
	}else{
		int tm = (tl + tr) / 2;
		build(v * 2 , tl , tm);
		build(v * 2 + 1 , tm + 1 , tr);
		t[v] = min(t[v * 2] , t[v * 2 + 1]);
	}
}
int main(){
	int n;
	cin >> n;
	map<long long, int>m;
	map<long long ,int>h;
	multiset<int>l;
	for(int i = 1; i <= n; i ++ ){
		long long x;
		cin >> x;
		m[x] ++ ;
	}
	int j = 1;
	for(auto it : m){
		a[j] = it.first;
		j ++ ;
	}
	int k = m.size();
	build(1 , 1, k);
	for(int i = 1; i <= k * 2 - 1; i ++ ){
		h[t[i]] ++ ;
	}
	for(auto it : h){
		int c = it.first;
		int b = it.second;
		l.insert(b);
	}
	bool f = 1;
	for(auto it : m){
		auto o = l.find(it.second);
		if(o == l.end()){
			f = 0;
		}else{
			l.erase(o);
		}
	}
	if(f){
		for(auto it : m){
			cout << it.first << ' ';
		}
	}else{
		cout << -1 << '\n';
	}
}
