#include<iostream>
using namespace std;
int arr[101];
typedef struct BSTNode {
    int data;
    struct BSTNode* left;
    struct BSTNode* right;
}BSTNode, * BSTree;
void Insert_BST(BSTree& t, int k) {
    if (t == NULL) {
        t = (BSTNode*)malloc(sizeof(BSTNode));
        t->data = k;
        t->left = t->right = NULL;
        return;//return不是直接结束的好像,递归结束有问题
    }
    else if (t->data > k) {
        Insert_BST(t->left, k);
    }
    else {
        Insert_BST(t->right, k);
    }

}
void findPar(BSTree t, int k, int &p)//注意father是引用的
{
    
    /*if (t->data == k) {
        return;
    }
    else if (t->data > k) {
        findPar(t->left, k, p);
        p = t->data;

    }
    else {
        findPar(t->right, k, p);
        p = t->data;
    }这里递归我忘记了递归是从底层开始逐层往上返回的,所以最后这样写最后的father都是2
    */
    //用非递归方式,而且找路径而已非递归即可
    while (t->data != k) {
        p = t->data;
        if (t->data > k) {
            t = t->left;
        }
        else {
            t = t->right;
        }
    }




}
int main() {
    int N;
    while (cin >> N && N) {
        for (int i = 0; i < N; i++) {
            cin >> arr[i];
        }
        BSTree T = NULL;//初始化
        Insert_BST(T, arr[0]);
        cout << -1 << endl;
        for (int i = 1; i < N; i++) {
            Insert_BST(T, arr[i]);
            int father=0;//注意初始化
            findPar(T, arr[i], father);
            cout << father << endl;
        }



    }


}