#include <bits/stdc++.h>
using namespace std;
const int max_n = 100010;
const int max_v = 300010;
int sl[4 * max_v], sr[4 * max_v];
int smax[4 * max_v], sval[4 * max_v], snd[4 * max_v];
void init(int ix, int l, int r) {
  sl[ix] = l;
  sr[ix] = r;
  sval[ix] = 0;
  smax[ix] = 0;
  snd[ix] = r - 1;
  if ((l + 1) < r) {
    int mid = (l + r) / 2;
    init(2 * ix + 1, l, mid);
    init(2 * ix + 2, mid, r);
    snd[ix] = snd[2 * ix + 2];
  }
}
void update(int ix, int l, int r, int val) {
  int lc = 2 * ix + 1, rc = 2 * ix + 2;
  if (l == sl[ix] and r == sr[ix]) {
    sval[ix] += val;
    smax[ix] += val;
    return;
  } else if (r <= sr[lc])
    update(lc, l, r, val);
  else if (l >= sl[rc])
    update(rc, l, r, val);
  else {
    update(lc, l, sr[lc], val);
    update(rc, sl[rc], r, val);
  }
  if (smax[lc] > smax[rc]) {
    smax[ix] = sval[ix] + smax[lc];
    snd[ix] = snd[lc];
  } else {
    smax[ix] = sval[ix] + smax[rc];
    snd[ix] = snd[rc];
  }
}
pair<int, int> query() { return make_pair(smax[0], snd[0]); }
int n, lim = 0;
int l[max_n], v[max_n], r[max_n];
pair<pair<int, int>, int> crd[2 * max_n];
int ans = 0;
int L, R;
int main() {
  scanf("%d", &n);
  for (int i = 0; i < (n); i++) {
    scanf("%d", &l[i]);
    scanf("%d", &v[i]);
    scanf("%d", &r[i]);
    crd[2 * i] = make_pair(make_pair(l[i], 0), i);
    crd[2 * i + 1] = make_pair(make_pair(v[i], 1), i);
    lim = max(lim, r[i]);
  }
  sort(crd, crd + 2 * n);
  init(0, 0, lim + 1);
  for (int i = 0; i < (2 * n); i++) {
    int tp = crd[i].first.second;
    int x = crd[i].first.first;
    int ix = crd[i].second;
    if (tp == 0) {
      update(0, v[ix], r[ix] + 1, 1);
      pair<int, int> ret = query();
      if (ret.first > ans) {
        ans = ret.first;
        L = l[ix];
        R = ret.second;
      }
    } else
      update(0, v[ix], r[ix] + 1, -1);
  }
  printf("%d\n", ans);
  for (int i = 0; i < (n); i++)
    if (l[i] <= L and L <= v[i] and v[i] <= R and R <= r[i])
      printf("%d ", i + 1);
  printf("\n");
  return 0;
}
