#include <bits/stdc++.h>
using namespace std;
int n, a, b;
int p[100100];
int ID;
bool flag;
bool vis[100100];
int check(int x) {
  int tmp;
  vis[x] = true;
  if (vis[p[x]]) return 1;
  tmp = check(p[x]) + 1;
  return tmp;
}
void DFS(int id, int f) {
  vis[id] = false;
  if (f)
    printf("%d %d\n", a, id);
  else
    printf("%d %d\n", b, id);
  if (vis[p[id]]) DFS(p[id], f ^ 1);
  return;
}
int main() {
  while (~scanf("%d", &n)) {
    ID = 0;
    for (int i = 1; i <= n; i++) {
      scanf("%d", &p[i]);
      if (p[i] == i) ID = p[i];
    }
    if (ID) {
      puts("YES");
      for (int i = 1; i <= n; i++) {
        if (i == ID) continue;
        printf("%d %d\n", i, ID);
      }
    } else {
      flag = false;
      memset(vis, false, sizeof(vis));
      for (int i = 1; i <= n; i++) {
        if (p[p[i]] == i) {
          flag = true;
          vis[i] = vis[p[i]] = true;
          a = i;
          b = p[i];
          break;
        }
      }
      if (!flag)
        puts("NO");
      else {
        for (int i = 1; i <= n; i++) {
          if (vis[i]) continue;
          if (check(i) % 2 == 0) continue;
          flag = false;
        }
        if (!flag)
          puts("NO");
        else {
          puts("YES");
          printf("%d %d\n", a, b);
          vis[a] = vis[b] = false;
          for (int i = 1; i <= n; i++) {
            if (!vis[i]) continue;
            DFS(i, 0);
          }
        }
      }
    }
  }
  return 0;
}
