#include <bits/stdc++.h>
using namespace std;
const int N = 1e5;
int n;
bool out[N + 3], vis[N + 3];
vector<int> scc[N + 3];
vector<pair<int, int> > ans;
struct DSU {
  int fa[N + 3];
  void Init() {
    for (int i = 1; i <= n; i++) fa[i] = i;
  }
  int FindFa(int u) {
    if (u == fa[u]) return u;
    return fa[u] = FindFa(fa[u]);
  }
  bool Merge(int u, int v) {
    int fu = FindFa(u), fv = FindFa(v);
    if (fu == fv) return false;
    fa[fu] = fv;
    return true;
  }
} D;
int main() {
  scanf("%d", &n);
  D.Init();
  for (int u = 1; u <= n; u++) {
    int v;
    scanf("%d", &v);
    D.Merge(u, v);
    out[v] = true;
  }
  for (int u = 1; u <= n; u++)
    if (!out[u]) {
      int fu = D.FindFa(u);
      scc[fu].push_back(u);
    }
  int las = 0, fir = 0;
  for (int u = 1; u <= n; u++) {
    if (D.fa[u] != u) continue;
    if (las) {
      for (auto v : scc[u]) ans.push_back(make_pair(las, v));
      if (!scc[u].size()) ans.push_back(make_pair(las, u));
    }
    if (!fir) fir = u;
    las = u;
  }
  for (auto v : scc[fir]) ans.push_back(make_pair(las, v));
  if (!scc[fir].size() && fir != las) ans.push_back(make_pair(las, fir));
  printf("%d\n", (int)ans.size());
  for (auto it : ans) printf("%d %d\n", it.first, it.second);
  return 0;
}
