Problem:
Score : 200 points

Problem Statement

We have a sequence p = {p_1,\ p_2,\ ...,\ p_N} which is a permutation of {1,\ 2,\ ...,\ N}.

You can perform the following operation at most once: choose integers i and j (1 \leq i < j \leq N), and swap p_i and p_j. Note that you can also choose not to perform it.

Print YES if you can sort p in ascending order in this way, and NO otherwise.

Constraints

All values in input are integers.

2 \leq N \leq 50

p is a permutation of {1,\ 2,\ ...,\ N}.

Input

Input is given from Standard Input in the following format:

N
p_1 p_2 ... p_N

Output

Print YES if you can sort p in ascending order in the way stated in the problem statement, and NO otherwise.

Sample Input 1

5
5 2 3 4 1

Sample Output 1

YES

You can sort p in ascending order by swapping p_1 and p_5.

Sample Input 2

5
2 4 3 5 1

Sample Output 2

NO

In this case, swapping any two elements does not sort p in ascending order.

Sample Input 3

7
1 2 3 4 5 6 7

Sample Output 3

YES

p is already sorted in ascending order, so no operation is needed.

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

#include <stdio.h>

int check(int array[], int n)
{
	int sorted;
	for (int i=0; i<(n-1); i++)
	{
		if (array[i]<array[i+1])
			sorted=1;
		else{
			sorted=0;
			break;//once here the code breaks out of the loop and returns false
		}
	}
	return sorted;
	// if (n == 0)
	// {
	// 	return 1;
	// } else {
	// 	if (array[n] > array[n-1])
	// 	{
	// 		return check(array, n-1);
	// 	} else {
	// 		return 0;
	// 	}
	// }
}

int main()
{
	int n, temp, i, j, k, res = 0, che;
	scanf("%d", &n);
	int arr[n];
	int temparr[n];
	for (i = 0; i < n; ++i)
	{
		scanf("%d", &temp);
		arr[i] = temp;
		temparr[i] = temp;
	}
	for (i = 0; i < n; ++i)
	{
		if (check(temparr, n))
		{
			res = 1;
			break;
		}
		for (j = 0; j < n; ++j)
		{
			if (i == j)
			{
				continue;
			}

			temp = temparr[i];
			temparr[i] = temparr[j];
			temparr[j] = temp;

			// printf("%d-%d\n", temparr[j], temparr[i]);
			// for (k = 0; k < n; ++k)
			// {
			// 	printf("%d\t", temparr[k]);
			// }
			// che = check(temparr, n);
			// printf("\n%d\n\n", check(temparr, n));

			if (check(temparr, n) == 1)
			{
				res = 1;
				// printf("%d-%d", temp, arr[i]);
				break;
			}

			temparr[i] = arr[i];
			temparr[j] = arr[j];

		}
	}

	if (res == 1)
	{
		printf("YES");
	} else {
		printf("NO");
	}

	return 0;
}