#include <iostream>
#include <algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<vector>
#include<iomanip>
#include<queue> 
#define sqr(x) (x)*(x)
#define mk(x,y,z) make_pair(x,make_pair(y,z))
using namespace std;
int n,m,i,j,k,dp[1000005][25],num[1000005],re[1000005],x,y,z,lg[1000005],l,r;
priority_queue<pair<int,pair<int,int>/**/>,vector<pair<int,pair<int,int>/**/>/**/>,greater<pair<int,pair<int,int>/**/>/**/>/**/> pq;
int rmq(int s,int t)
{
	int c=(t-s)/2+1;
	int d=lg[c];
	return min(dp[s][d],dp[t-2*((1<<d)-1)][d]);
}
int main()
{
	ios::sync_with_stdio(0);
	cin>>n;
	for (i=1;i<=n;i++)
	{
		cin>>num[i];
		re[num[i]]=i;
	}
	for (i=1;i<=n;i++)
	{
		x=lg[i-1];
		if (1<<(x+1)<=i) x++;
		lg[i]=x;
	}
	for (i=1;i<=n;i++)
	{
		dp[i][0]=num[i];
	}
	for (i=n+1;i<=1000000;i++) dp[i][0]=1<<30;
	for (j=1;j<=18;j++)
	{
		for (i=1;i<=n;i++)
		{
			dp[i][j]=min(dp[i][j-1],dp[i+(1<<j)][j-1]);
		}
	}
	pq.push(mk(rmq(1,n-1),1,n));
	for (i=1;i<=n/2;i++)
	{
		x=pq.top().first;
		y=rmq(re[x]+1,pq.top().second.second);
		cout<<x<<' '<<y<<' ';
		x=re[x];
		y=re[y];
		l=pq.top().second.first;
		r=pq.top().second.second;
		pq.pop();
		if (l<x-1) 
		{
			pq.push(mk(rmq(l,x-1-1),l,x-1));
		}
		if (x+1<y-1)
		{
			pq.push(mk(rmq(x+1,y-1-1),x+1,y-1));
		}
		if (y+1<r)
		{
			pq.push(mk(rmq(y+1,r-1),y+1,r));
		}
	}
	return 0;
} 