A ledger's entries hang on a binary tree over vertical columns and horizontal rows. The root is at column 0, row 0; a left child is at (column - 1, row + 1) and a right child at (column + 1, row + 1). Produce a strict vertical-order listing of all node values: order primarily by column (left to right); within the same column order by row (top to bottom); and when two nodes share the same column and row, order them by value (smaller value first). Emit the resulting values as one flat sequence.
Input format
Line 1: an integer n, the number of tokens on the next line.
Line 2: n space-separated tokens describing a binary tree in level-order (breadth-first). The first token is the root's value. Reading left to right, keep a queue of already-created nodes; for each node taken from the front of the queue, the next two tokens are its left child then its right child, where the token null marks a missing child. Only non-null children are added to the queue. Trailing null tokens for absent children at the deepest level may be omitted. Every node value is an integer.
Output format
A single line: all node values in strict (column, row, value) order, space-separated.
Constraints
- 1 <= n <= 129
- The tree has at least 1 and at most 40 nodes.
- Each node value is an integer with -1000 <= value <= 1000.