Problem:
Score : 1500 points

Problem Statement

We have a grid with 3 rows and N columns.
The cell at the i-th row and j-th column is denoted (i, j).
Initially, each cell (i, j) contains the integer i+3j-3.

A grid with N=5 columns

Snuke can perform the following operation any number of times:

Choose a 3×3 subrectangle of the grid. The placement of integers within the subrectangle is now rotated by 180°.

An example sequence of operations (each chosen subrectangle is colored blue)

Snuke's objective is to manipulate the grid so that each cell (i, j) contains the integer a_{i,j}.
Determine whether it is achievable.

Constraints

5≤N≤10^5

1≤a_{i,j}≤3N

All a_{i,j} are distinct.

Input

The input is given from Standard Input in the following format:

N
a_{1,1} a_{1,2} ... a_{1,N}
a_{2,1} a_{2,2} ... a_{2,N}
a_{3,1} a_{3,2} ... a_{3,N}

Output

If Snuke's objective is achievable, print Yes. Otherwise, print No.

Sample Input 1

5
9 6 15 12 1
8 5 14 11 2
7 4 13 10 3

Sample Output 1

Yes

This case corresponds to the figure in the problem statement.

Sample Input 2

5
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15

Sample Output 2

No

Sample Input 3

5
1 4 7 10 13
2 5 8 11 14
3 6 9 12 15

Sample Output 3

Yes

The objective is already achieved with the initial placement of the integers.

Sample Input 4

6
15 10 3 4 9 16
14 11 2 5 8 17
13 12 1 6 7 18

Sample Output 4

Yes

Sample Input 5

7
21 12 1 16 13 6 7
20 11 2 17 14 5 8
19 10 3 18 15 4 9

Sample Output 5

No

Solution in C (GCC 9.2.1) (judge verdict: Accepted)

a[3][1<<18],b[2],x,y,N[2][1<<18],i,j;main(n){scanf("%d",&n);for(;i<3;++i)for(j=0;j<n;++j){scanf("%d",&a[i][j]);--a[i][j];}for(j=0;j<n;++j){if(a[0][j]/3-a[1][j]/3||a[1][j]/3-a[2][j]/3||a[2][j]/3-a[0][j]/3||a[1][j]%3-1||a[1][j]/3-j&1){puts("No");return 0;}x=a[1][j]/3+1;while(x){b[j&1]-=N[j&1][x]%2;x-=x&-x;}b[j&1]+=j/2;y=a[2][j]/3+1;while(y<1<<18){++N[j&1][y];y+=y&-y;}if(a[0][j]%3)++b[1-j%2];}puts(b[0]&1|b[1]&1?"No":"Yes");}