#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) {
  a = abs(a), b = abs(b);
  if (a < b) swap(a, b);
  return b ? gcd(b, a % b) : a;
}
long long lcm(long long a, long long b) { return a * b / gcd(a, b); }
long long fast_pow(long long x, long long exp, long long mod) {
  long long ret = 1;
  while (exp) {
    if (exp & 1) ret = (ret * x) % mod;
    x = (x * x) % mod;
    exp >>= 1;
  }
  return ret;
}
const int dx[] = {0, 0, -1, 1};
const int dy[] = {-1, 1, 0, 0};
const int inf = (int)1e9 + 5;
vector<vector<int> > adj;
vector<int> v;
priority_queue<int> q;
map<int, int> mp;
set<int> st;
int n, a[1000000 + 5], prv[1000000 + 5];
int32_t main(void) {
  ios_base::sync_with_stdio(false), cin.tie(nullptr);
  cin >> n;
  for (int i = 0; i < n; ++i) cin >> a[i];
  int max_v = -1;
  for (int i = 0; i < n; ++i) {
    mp[a[i]] = max(mp[a[i]], mp[a[i] - 1] + 1);
    max_v = max(max_v, mp[a[i]]);
  }
  for (auto obj : mp) {
    if (obj.second == max_v) {
      max_v = obj.first;
      break;
    }
  }
  for (int i = n - 1; i >= 0; --i) {
    if (a[i] == max_v) {
      v.emplace_back(i);
      --max_v;
    }
  }
  reverse((v).begin(), (v).end());
  cout << (int)(v).size() << '\n';
  for (auto x : v) cout << ++x << " ";
  return 0;
}
