#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

int main() {
	// step #1. read input
	int N;
	cin >> N;
	vector<int> P(N);
	for (int i = 0; i < N; i++) {
		cin >> P[i];
		P[i] -= 1;
	}
	
	// step #2. calculate number of j that j < i, P[j] < P[i] for each i
	vector<int> pinv(N);
	for (int i = 0; i < N; i++) {
		pinv[P[i]] = i;
	}
	vector<int> val(N);
	vector<int> bit(N + 1);
	for (int i = 0; i < N; i++) {
		for (int j = pinv[i]; j >= 1; j -= j & (-j)) {
			val[i] += bit[j];
		}
		for (int j = pinv[i] + 1; j <= N; j += j & (-j)) {
			bit[j] += 1;
		}
	}
	
	// step #3. construct
	vector<int> even;
	for (int i = 0; i < N; i++) {
		if (val[i] % 2 == 0) {
			even.push_back(i);
		}
	}
	even.push_back(N);
	int F = even.size() - 1;
	bool flag = true;
	for (int i = 0; i < F; i++) {
		for (int j = even[i] + 1; j < even[i + 1]; j++) {
			if (pinv[even[i]] > pinv[j]) {
				flag = false;
			}
		}
	}
	if (!flag) {
		cout << "No\n";
	}
	else {
		cout << "Yes\n";
		for (int i = 0; i < F; i++) {
			for (int j = even[i] + 1; j < even[i + 1]; j++) {
				cout << j + 1 << ' ' << val[j] << '\n';
			}
			cout << even[i] + 1 << ' ' << val[even[i]] + 1 << '\n';
		}
	}
	
	return 0;
}