#D4095. Map

    ID: 3400 Type: Default 4000ms 268MiB

Map

Map

For a dictionary MM that stores elements formed by a pair of a string key and an integer value, perform a sequence of the following operations. Note that multiple elements can have equivalent keys.

  • insert(keykey, xx): Insert an element formed by a pair of keykey and xx to MM.
  • get(keykey): Print all values with the specified keykey.
  • delete(keykey): Delete all elements with the specified keykey.
  • dump(LL, RR): Print all elements formed by a pair of the key and the value such that the key is greater than or equal to LL and less than or equal to RR in lexicographic order.

Constraints

  • 1q200,0001 \leq q \leq 200,000
  • 1x1,000,000,0001 \leq x \leq 1,000,000,000
  • 11 \leq length of keykey 20 \leq 20
  • keykey consists of lower-case letters
  • LRL \leq R in lexicographic order
  • The total number of elements printed by get operations does not exceed 500,000500,000
  • The total number of elements printed by dump operations does not exceed 500,000500,000

Input

The input is given in the following format.

qq query1query_1 query2query_2 : queryqquery_q

Each query queryiquery_i is given by

0 keykey xx

or

1 keykey

or

2 keykey

or

3 LL RR

where the first digits 0, 1, 2 and 3 represent insert, get, delete and dump operations.

Output

For each get operation, print the corresponding values in the order of insertions. For each dump operation, print the corresponding elements formed by a pair of the key and the value. For the dump operation, print the elements in ascending order of the keys, in case of a tie, in the order of insertions.

Example

Input

10 0 blue 6 0 red 1 0 blue 4 0 white 5 1 red 1 blue 2 red 1 black 1 red 3 w z

Output

1 6 4 white 5

inputFormat

Input

The input is given in the following format.

qq query1query_1 query2query_2 : queryqquery_q

Each query queryiquery_i is given by

0 keykey xx

or

1 keykey

or

2 keykey

or

3 LL RR

where the first digits 0, 1, 2 and 3 represent insert, get, delete and dump operations.

outputFormat

Output

For each get operation, print the corresponding values in the order of insertions. For each dump operation, print the corresponding elements formed by a pair of the key and the value. For the dump operation, print the elements in ascending order of the keys, in case of a tie, in the order of insertions.

Example

Input

10 0 blue 6 0 red 1 0 blue 4 0 white 5 1 red 1 blue 2 red 1 black 1 red 3 w z

Output

1 6 4 white 5

样例

10
0 blue 6
0 red 1
0 blue 4
0 white 5
1 red
1 blue
2 red
1 black
1 red
3 w z
1

6 4 white 5

</p>