Keen Kena Googler the Keener was keen to try out some queries on the new multiset he got for his birthday, until he realized that he seemed to be getting incorrect answers for his queries. Thus, he decided to write a program that simulates the queries he's trying to perform on the multiset. However, his program wasn't very efficient, and he hopes that you might be able to help him write a better one.

His multiset supports the following queries (Note: denotes the bitwise XOR operation between integers and ):

`1 x`

: Insert the integer into the multiset.`2 l r x`

: For every integer in the multiset where , replace it with .`3 l r`

: Let be all integers in the multiset where . Output the value .

Write a program that can support queries of the above types.

#### Constraints

For all subtasks:

##### Subtask 1 [1/15]

##### Subtask 2 [2/15]

There will be no operations of the type `2 l r x`

.

##### Subtask 3 [4/15]

For all operations of the type `2 l r x`

, and .

##### Subtask 4 [8/15]

No additional constraints.

#### Input Specification

The first line will contain two integers, and .

The next line will contain space-separated integers, the initial elements of Keen Kena Googler the Keener's multiset.

The next lines will each contain a query of one of the above three types.

#### Output Specification

For each query of type , output its answer on a separate line.

#### Sample Input

```
2 3
1 2
2 0 3 4
3 2 9
3 5 5
```

#### Sample Output

```
3
5
```

#### Sample Explanation

Our initial multiset contains . After our first operation, we have . The first type operation outputs while the second one outputs .

## Comments