#include <bits/stdc++.h>
using ll = long long;
using namespace std;
ll M = 1000000007;
bool ps1(const pair<int, int> &forall_a_in_P,
         const pair<int, int> &forall_b_in_P) {
  return forall_a_in_P.first < forall_b_in_P.first;
}
bool ps2(const pair<int, int> &forall_a_in_P,
         const pair<int, int> &forall_b_in_P) {
  return forall_a_in_P.first > forall_b_in_P.first;
}
bool ps3(const pair<int, int> &forall_a_in_P,
         const pair<int, int> &forall_b_in_P) {
  return forall_a_in_P.second < forall_b_in_P.second;
}
bool ps4(const pair<int, int> &forall_a_in_P,
         const pair<int, int> &forall_b_in_P) {
  return forall_a_in_P.second > forall_b_in_P.second;
}
int main() {
  int n;
  scanf("%d", &n);
  vector<int> f(n);
  vector<bool> used(n, false);
  vector<bool> yet(n, false);
  deque<int> notused, ans;
  for (int j = 0; j < (int)(n); j++) {
    scanf("%d", &f[j]);
    if (f[j] != 0) {
      used[f[j] - 1] = true;
    } else {
      yet[j] = true;
    }
  }
  for (int i = 0; i < (int)(n); i++) {
    if (!used[i]) {
      notused.push_back(i + 1);
      if (yet[i]) {
        ans.push_front(i + 1);
        yet[i] = false;
      }
    }
  }
  for (int i = 0; i < (int)(n); i++) {
    if (yet[i]) {
      ans.push_back(i + 1);
    }
  }
  for (int i = 0; i < (int)(ans.size()); i++) {
    bool still = true;
    while (still) {
      if (notused.front() != ans[i]) {
        f[ans[i] - 1] = notused.front();
        notused.pop_front();
        still = false;
      } else {
        int tmp = notused.front();
        notused.pop_front();
        notused.push_back(tmp);
      }
    }
  }
  for (int i = 0; i < (int)(n); i++) {
    printf("%d", f[i]);
    if (i != n - 1) {
      printf(" ");
    } else {
      printf("\n");
    }
  }
}
