#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;
}