#include <bits/stdc++.h>
using namespace std;
int n;
pair<int, int> maxv[310000 << 2];
int addtag[310000 << 2];
void pushup(int o) { maxv[o] = max(maxv[((o) << 1)], maxv[(((o) << 1) | 1)]); }
void pushdown(int o) {
  if (addtag[o]) {
    maxv[((o) << 1)].first += addtag[o],
        maxv[(((o) << 1) | 1)].first += addtag[o];
    addtag[((o) << 1)] += addtag[o], addtag[(((o) << 1) | 1)] += addtag[o];
    addtag[o] = 0;
  }
}
void Build(int o, int L, int R) {
  if (L == R) {
    maxv[o].second = L;
    return;
  }
  int M = (L + R) >> 1;
  Build(((o) << 1), L, M);
  Build((((o) << 1) | 1), M + 1, R);
  pushup(o);
}
void update(int o, int L, int R, int ql, int qr, int addv) {
  if (ql <= L && R <= qr) {
    maxv[o].first += addv;
    addtag[o] += addv;
    return;
  }
  pushdown(o);
  int M = (L + R) >> 1;
  if (ql <= M) update(((o) << 1), L, M, ql, qr, addv);
  if (qr > M) update((((o) << 1) | 1), M + 1, R, ql, qr, addv);
  pushup(o);
}
struct Node {
  int L, R, addv;
};
vector<Node> vec[310000];
int L[310000], v[310000], R[310000];
int main() {
  int maxval = 0;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d%d%d", &L[i], &v[i], &R[i]);
    maxval = max(maxval, v[i]);
    Node a, b;
    a.L = v[i], a.R = R[i], a.addv = 1;
    b.L = v[i], b.R = R[i], b.addv = -1;
    vec[L[i]].push_back(a);
    vec[v[i] + 1].push_back(b);
  }
  maxval += 10;
  int ans = 0, ansL = -1, ansR = -1;
  Build(1, 1, maxval);
  for (int i = 1; i <= maxval; i++) {
    for (int p = 0; p < vec[i].size(); p++)
      update(1, 1, maxval, vec[i][p].L, vec[i][p].R, vec[i][p].addv);
    if (ans < maxv[1].first) {
      ans = maxv[1].first;
      ansL = i, ansR = maxv[1].second;
    }
  }
  printf("%d\n", ans);
  for (int i = 1; i <= n; i++)
    if (L[i] <= ansL && ansR <= R[i] && ansL <= v[i] && v[i] <= ansR)
      printf("%d ", i);
  printf("\n");
  return 0;
}
