Problem:
Score : 1200 points

Problem Statement

You are given a permutation of 1,2,...,N: p_1,p_2,...,p_N. Determine if the state where p_i=i for every i can be reached by performing the following operation any number of times:

Choose three elements p_{i-1},p_{i},p_{i+1} (2\leq i\leq N-1) such that p_{i-1}>p_{i}>p_{i+1} and reverse the order of these three.

Constraints

3 \leq N \leq 3 × 10^5

p_1,p_2,...,p_N is a permutation of 1,2,...,N.

Input

Input is given from Standard Input in the following format:

N
p_1
:
p_N

Output

If the state where p_i=i for every i can be reached by performing the operation, print Yes; otherwise, print No.

Sample Input 1

5
5
2
1
4
3

Sample Output 1

Yes

The state where p_i=i for every i can be reached as follows:

Reverse the order of p_1,p_2,p_3. The sequence p becomes 1,2,5,4,3.

Reverse the order of p_3,p_4,p_5. The sequence p becomes 1,2,3,4,5.

Sample Input 2

4
3
2
4
1

Sample Output 2

No

Sample Input 3

7
3
2
1
6
5
4
7

Sample Output 3

Yes

Sample Input 4

6
5
3
4
1
2
6

Sample Output 4

No

Solution in Scala (2.11.7) (judge verdict: Wrong Answer)

import scala.annotation.tailrec

object Main extends App {
  val max = io.StdIn.readLine().toInt
  val lines : Seq[Int] = for (_ <- 1 to max ) yield {
    io.StdIn.readLine().toInt
  }
  sortCheck(1, max, lines) match {
    case Right(str) => println(str)
    case Left(str) =>  println(str)
  }

  /*
   * pi−1>pi>pi+1のpi-1とpi+1を好きなだけ入れ替えた場合に、
   * 正しくsortできるかをチェックする。
   *
   * 以下のチェック条件に合致すればyes, それ以外はnoを返す。
   * ①入力回数が奇数回に渡される数字は奇数であること。
   * ②入力回数は偶数回に渡される数字は偶数であること。
   */
  @tailrec
  def sortCheck(num : Int, max : Int, lines : Seq[Int]) : Either[String, String] = {
    val yes = "Yes"
    val no = "No"
    lines.head match {
      case i if i % 2 == 1 && num % 2 == 0 => Left(no) // ②
      case i if i % 2 == 0 && num % 2 == 1 => Left(no) // ①
      case i if i == max => Right(yes)
      case _ => sortCheck( num + 1, max, lines.tail)
    }
  }
}