#include <bits/stdc++.h>
using namespace std;
int edges[100000 + 2], start[100000 + 2], end_[100000 + 2];
int indegree[100000 + 2];
bool vis[100000 + 2];
int paths, last, n;
void dfs(int u) {
  vis[u] = 1;
  if (edges[u] == -1 || vis[edges[u]]) {
    last = u;
    return;
  }
  dfs(edges[u]);
}
int main() {
  scanf("%d", &n);
  memset(edges, -1, sizeof edges);
  for (int i = 1, temp; i <= n; i++) {
    scanf("%d", &temp);
    edges[i] = temp;
    indegree[temp]++;
  }
  paths = 0;
  for (int i = 1; i <= n; i++) {
    if (indegree[i] == 0) {
      int j = i;
      while (!vis[j]) vis[j] = 1, j = edges[j];
      start[++paths] = i;
      end_[paths] = j;
    }
  }
  for (int i = 1; i <= n; i++) {
    if (vis[i] == 0) {
      int j = i;
      while (!vis[j]) vis[j] = 1, j = edges[j];
      start[++paths] = i;
      end_[paths] = i;
    }
  }
  if (paths == 1 && start[paths] == end_[paths]) {
    printf("0\n");
  } else {
    start[0] = start[paths];
    end_[0] = end_[paths];
    printf("%d\n", paths);
    for (int i = 1; i <= paths; i++) {
      printf("%d %d\n", end_[i - 1], start[i]);
    }
  }
}
