Problem:
Score : 500 points

Problem Statement

There are N boxes arranged in a circle. The i-th box contains A_i stones.

Determine whether it is possible to remove all the stones from the boxes by repeatedly performing the following operation:

Select one box. Let the box be the i-th box. Then, for each j from 1 through N, remove exactly j stones from the (i+j)-th box. Here, the (N+k)-th box is identified with the k-th box.

Note that the operation cannot be performed if there is a box that does not contain enough number of stones to be removed.

Constraints

1 ≦ N ≦ 10^5

1 ≦ A_i ≦ 10^9

Input

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

N
A_1 A_2 … A_N

Output

If it is possible to remove all the stones from the boxes, print YES. Otherwise, print NO.

Sample Input 1

5
4 5 1 2 3

Sample Output 1

YES

All the stones can be removed in one operation by selecting the second box.

Sample Input 2

5
6 9 12 10 8

Sample Output 2

YES

Sample Input 3

4
1 2 3 1

Sample Output 3

NO

Solution in Kotlin (1.0.0) (judge verdict: Wrong Answer)

import java.util.*

fun main(args: Array<String>){
	val cin = Scanner(System.`in`)
    val n = cin.nextInt()

    var sum: Long = 0
    val a: MutableList<Long> = mutableListOf()
    for (i in 1..n) {
        val ai = cin.nextLong()
        a.add(ai)
        sum += ai
    }

    var sum_one: Long = 0
    for (i in 1..n) {
        sum_one += i
    }
    
    var ok = 1
    var bye_n: Long = 0
    if (sum % sum_one == 0.toLong()) {
        bye_n = sum/sum_one
    } else {
        ok = 0
    }

    var real_bye_n: Long = 0

    if (ok == 1) {
        for (i in 1..n) {
            var sub: Long
            if (i == n) {
                sub = a[0] - a[n-1]
            } else {
                sub = a[i] - a[i-1]
            }
            var cut: Long = bye_n - sub
            if (cut % n == 0.toLong()) {
                cut = cut/n
            } else {
                ok = 0
                break
            }
            real_bye_n += cut
        }
    }

    if (real_bye_n != bye_n) {
        ok = 0
    }

    if (ok == 1) {
        println("YES")
    } else {
        println("NO")
    }
}