Andrewid the Android is a galaxy-famous detective. He is now investigating a case of frauds who make fake copies of the famous Stolp's gears, puzzles that are as famous as the Rubik's cube once was.

Its most important components are a button and a line of n similar gears. Each gear has n teeth containing all numbers from 0 to n - 1 in the counter-clockwise order. When you push a button, the first gear rotates clockwise, then the second gear rotates counter-clockwise, the the third gear rotates clockwise an so on.

Besides, each gear has exactly one active tooth. When a gear turns, a new active tooth is the one following after the current active tooth according to the direction of the rotation. For example, if n = 5, and the active tooth is the one containing number 0, then clockwise rotation makes the tooth with number 1 active, or the counter-clockwise rotating makes the tooth number 4 active.

Andrewid remembers that the real puzzle has the following property: you can push the button multiple times in such a way that in the end the numbers on the active teeth of the gears from first to last form sequence 0, 1, 2, ..., n - 1. Write a program that determines whether the given puzzle is real or fake.

Input

The first line contains integer n (1 ≤ n ≤ 1000) — the number of gears.

The second line contains n digits a1, a2, ..., an (0 ≤ ai ≤ n - 1) — the sequence of active teeth: the active tooth of the i-th gear contains number ai.

Output

In a single line print "Yes" (without the quotes), if the given Stolp's gears puzzle is real, and "No" (without the quotes) otherwise.

Examples

Input

3
1 0 0


Output

Yes


Input

5
4 2 1 4 3


Output

Yes


Input

4
0 2 3 1


Output

No

Note

In the first sample test when you push the button for the first time, the sequence of active teeth will be 2 2 1, when you push it for the second time, you get 0 1 2.
# char_to_dots = {
#   'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.', 'F': '..-.',
#   'G': '--.', 'H': '....', 'I': '..', 'J': '.---', 'K': '-.-', 'L': '.-..',
#   'M': '--', 'N': '-.', 'O': '---', 'P': '.--.', 'Q': '--.-', 'R': '.-.',
#   'S': '...', 'T': '-', 'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-',
#   'Y': '-.--', 'Z': '--..', ' ': ' ', '0': '-----',
#   '1': '.----', '2': '..---', '3': '...--', '4': '....-', '5': '.....',
#   '6': '-....', '7': '--...', '8': '---..', '9': '----.',
#   '&': '.-...', "'": '.----.', '@': '.--.-.', ')': '-.--.-', '(': '-.--.',
#   ':': '---...', ',': '--..--', '=': '-...-', '!': '-.-.--', '.': '.-.-.-',
#   '-': '-....-', '+': '.-.-.', '"': '.-..-.', '?': '..--..', '/': '-..-.'
# }
#from cmath import sqrt
# def printThreads(max, steps):
#     step = max // steps

#     print("{")
#     start = 0
#     for i in range(1, steps + 1):
#         print("std::thread th", i, "(sr, arr + ", start, ", arr + ", start + step, ");", sep = "")
#         start += step
#     for i in range(1, steps + 1):
#         print("th", i, ".join();", sep = "")
#     print("}")
#     index = 2
#     steps //= 2
#     while steps >= 2:
#         start = 0
#         print("{")
#         for i in range(1, steps + 1):
#             print("std::thread th", i, "(inplace, arr + ", start, ", arr + ", start + step * (index // 2), ", arr + ", start + step * 2 * (index // 2), ");", sep = "")
#             start += step * index
#         for i in range(1, steps + 1):
#             print("th", i, ".join();", sep = "")
#         print("}")
#         index *= 2
#         steps //= 2


# printThreads(1000000000, 32)

from math import *
import random


def isSorted(list):
    for i in range(1, len(list)):
        if list[i] < list[i - 1]:
            return False
    return True

def stringToList(string):
    return [int(i) for i in string.split(' ')]


def isTrue(list):
    n = len(list)
    add = 0
    if list[0] == 0:
        pass
    else:
        add = n - list[0]
    for i in range(n):
        list[i] += add
        if list[i] >= n:
            list[i] -= n
        elif list[i] < 0:
            list[i] += n

        if i >= 1 and list[i] <= list[i - 1]:
            return False

        add = -add

    return True


_ = input()
inp = input()
list = stringToList(inp)
if isTrue(list):
    print("Yes")
else:
    print("No")
