#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
using namespace std;

struct node
{
	int value, position;
	bool left, right;
	bool operator < (const node& a) const
	{
		return value < a.value;
	}
};

int main()
{
	int n;
	cin >> n;

	vector < node > a(n);
	set < node > s;

	for (auto &i: a)
	{
		cin >> i.value;
		i.left=i.right=0;
	}

	a[0].position=1;
	s.insert(a[0]);

	for (int i=1; i<n; i++)
	{
		auto it=s.upper_bound(a[i]);
		auto it2=it; --it2;
		if (it==s.begin())
		{
			a[i].position=2*it->position;
			s.insert(a[i]);
			it->left=1;
		}
		else if (it==s.end())
		{
			a[i].position=2*(--it)->position+1;
			s.insert(a[i]);
			it->right=1;
		}
		else
		{
			if (it2->right==0)
			{
				a[i].position=2*it2->position+1;
				s.insert(a[i]);
				it2->right=1;
			}
			else
			{
				a[i].position=2*it->position;
				s.insert(a[i]);
				it->left=1;
			}
		}
	}

	for (auto i: a) cout << i.position << ' ';
}