時間制限 : sec, メモリ制限 : KB
English / Japanese  

Priority Queue

優先度付きキューは、データの中で最も優先度の高いものを先に取り出すデータ構造です。

整数を保持する$n$個の優先度付きキュー$Q_i$ ($i = 0, 1, ..., n-1$)に対して、以下の操作を行ってください。

  • insert($t$, $x$): $Q_t$ に整数$x$を挿入する。
  • getMax($t$): $Q_t$の中で最も大きい要素を報告する。ただし、$Q_t$が空の場合は何もしない。
  • deleteMax($t$): $Q_t$から最も大きい要素を1つ取り出し削除する。ただし、$Q_t$が空の場合は何もしない。

初期状態で、すべてのキューは空とします。

Input

入力は以下の形式で与えられます。

$n \; q$
$query_1$
$query_2$
:
$query_q$

各クエリ$query_i$は

0 $t$ $x$

または

1 $t$

または

2 $t$

の形式で与えられます。最初の数字0, 1, 2 は操作の種類を示し、それぞれinsert、getMax、deleteMaxを表します。

Output

各getMax操作ごとに、整数を1行に出力してください。

Constraints

  • $1 \leq n \leq 1,000$
  • $1 \leq q \leq 200,000$
  • $-1,000,000,000 \leq x \leq 1,000,000,000$

Sample Input 1

2 10
0 0 3
0 0 9
0 0 1
1 0
2 0
1 0
0 0 4
1 0
0 1 8
1 1

Sample Output 1

9
3
4
8