#include <iostream>
#include <cstdio>
#include <queue>

using namespace std;

/*
 * 复数
 */
struct Complex {
    int real;
    int imag;

    Complex(int real, int imag) {
        this->real = real;
        this->imag = imag;
    }

    /**
     * 重载小于号
     * 即,优先级递增
     * @param c
     * @return
     */
    bool operator<(Complex c) const {
        if (real * real + imag * imag == c.real * c.real + c.imag * c.imag) {
            /*
             * 复数的模相等,则返回虚部较小者
             * 即,虚部较小者,其优先级高
             */
            return imag > c.imag;
        } else {
            /*
             * 复数的模不相等,则返回模较大者
             * 即,模大者,其优先级高
             */
            return real * real + imag * imag < c.real * c.real + c.imag * c.imag;
        }
    }
};

priority_queue<Complex> myPriorityQueue;

/**
 * 复数集合--北京邮电大学
 * @return
 */
int main() {
    int n;
    while (scanf("%d", &n) != EOF) {
        string instruction;
        cin >> instruction;
        if (instruction == "Pop") {
            /*
             * 指令为Pop
             * 判断优先队列是否为空,空则输出empty;否则输出并删除最大复数
             */
            if (myPriorityQueue.empty()) {
                printf("empty\n");
            } else {
                Complex cur = myPriorityQueue.top();
                myPriorityQueue.pop();
                printf("%d+i%d\n", cur.real, cur.imag);
                printf("SIZE = %d\n", myPriorityQueue.size());

            }
        } else {
            /*
             * 指令为Insert
             * 输入实部和虚部,并将复数存入到优先队列中
             */
            int real;
            int imag;
            scanf("%d+i%d", &real, &imag);
            myPriorityQueue.push(Complex(real, imag));
            printf("SIZE = %d\n", myPriorityQueue.size());
        }
    }

    return 0;
}