#include <bits/stdc++.h>
using namespace std;
int n, p[100005], x[100005], y[100005], z, g;
bool u[100005];
vector<int> v[100005];
void dfs(int x, int c) {
  if (u[x]) return;
  v[c].push_back(x);
  u[x] = 1;
  dfs(p[x], c);
}
int main() {
  scanf("%d", &n);
  for (int i = (1); i <= (n); i++) scanf("%d", &p[i]);
  for (int i = (1); i <= (n); i++)
    if (i == p[i]) {
      puts("YES");
      for (int j = (1); j <= (n); j++)
        if (j != i) printf("%d %d\n", i, j);
      return 0;
    }
  for (int i = (1); i <= (n); i++)
    if (!u[i]) {
      dfs(i, g);
      g++;
    }
  bool ok = 0;
  for (int i = (0); i < (g); i++)
    if (v[i].size() == 2) {
      ok = 1;
      x[z] = v[i][0];
      y[z++] = v[i][1];
      for (int j = (0); j < (g); j++)
        if (j != i) {
          if (v[j].size() % 2 == 0) {
            for (int k = (0); k < (v[j].size()); k++) {
              x[z] = v[i][k % 2];
              y[z++] = v[j][k];
            }
          } else {
            ok = 0;
            break;
          }
        }
      if (ok) {
        puts("YES");
        for (int i = (0); i < (z); i++) printf("%d %d\n", x[i], y[i]);
      }
      break;
    }
  if (!ok) puts("NO");
  scanf("\n");
}
