#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
const int inf = 0x3f3f3f3f;
int n, e[2][maxn], tot, rd[maxn];
int net[maxn], tail[maxn];
inline int read(void) {
  int num, sign = 1;
  char c;
  while (!isdigit(c = getchar()))
    if (c == '-') sign = 0;
  num = c - '0';
  while (isdigit(c = getchar())) num = (num << 1) + (num << 3) + c - '0';
  return sign ? num : -num;
}
int dfs(int u) {
  tail[u] = u;
  if (!tail[net[u]]) return tail[u] = dfs(net[u]);
  return tail[u];
}
signed main(void) {
  n = read();
  for (register int i = 1; i <= n; ++i) net[i] = read(), ++rd[net[i]];
  for (register int i = 1; i <= n; ++i)
    if (!rd[i]) {
      e[0][++tot] = i;
      e[1][tot] = dfs(i);
    }
  int ft = tot;
  for (register int i = 1; i <= n; ++i)
    if (!tail[i]) {
      e[0][++tot] = i;
      e[1][tot] = dfs(i);
    }
  if (tot == 1 && !ft) tot = 0;
  printf("%d\n", tot);
  for (register int i = 1; i <= tot; ++i)
    printf("%d %d\n", e[1][i], e[0][i % tot + 1]);
  return 0;
}
