#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int cnt = 0, f = 1;
  char c = getchar();
  while (!isdigit(c)) {
    if (c == '-') f = -f;
    c = getchar();
  }
  while (isdigit(c)) {
    cnt = (cnt << 3) + (cnt << 1) + (c ^ 48);
    c = getchar();
  }
  return cnt * f;
}
int n, Y[(600000 + 10)], cnt, ans = 0, ansx, ansy, tot;
int l[(600000 + 10)], r[(600000 + 10)], v[(600000 + 10)];
struct node2 {
  int x, Y1, Y2, tag;
} seg[(600000 + 10) << 1];
struct node {
  int l, r;
  int tag, gmax, pos;
} tree[(600000 + 10) << 2];
void pushdown(int p) {
  tree[p << 1].tag += tree[p].tag;
  tree[p << 1 | 1].tag += tree[p].tag;
  tree[p << 1].gmax += tree[p].tag;
  tree[p << 1 | 1].gmax += tree[p].tag;
  tree[p].tag = 0;
}
void pushup(int p) {
  if (tree[p << 1].gmax > tree[p << 1 | 1].gmax) {
    tree[p].pos = tree[p << 1].pos;
    tree[p].gmax = tree[p << 1].gmax;
  } else {
    tree[p].pos = tree[p << 1 | 1].pos;
    tree[p].gmax = tree[p << 1 | 1].gmax;
  }
}
void build(int p, int l, int r) {
  tree[p].l = l, tree[p].r = r;
  if (l == r) {
    tree[p].pos = Y[l];
    return;
  }
  int mid = (l + r) >> 1;
  build(p << 1, l, mid);
  build(p << 1 | 1, mid + 1, r);
  tree[p].pos = tree[p << 1].pos;
}
void modify(int p, int l, int r, int k) {
  pushdown(p);
  if (l <= Y[tree[p].l] && r >= Y[tree[p].r]) {
    tree[p].tag += k, tree[p].gmax += k;
    return;
  }
  int mid = (tree[p].l + tree[p].r) >> 1;
  if (l <= Y[mid]) modify(p << 1, l, r, k);
  if (r > Y[mid]) modify(p << 1 | 1, l, r, k);
  pushup(p);
}
bool cmp(node2 a, node2 b) { return a.x == b.x ? a.tag > b.tag : a.x < b.x; }
int main() {
  n = read();
  for (register int i = 1; i <= n; ++i) {
    l[i] = read(), v[i] = read(), r[i] = read();
    seg[++tot].x = l[i], seg[tot].Y1 = v[i], seg[tot].Y2 = r[i],
    seg[tot].tag = 1, Y[tot] = v[i];
    seg[++tot].x = v[i], seg[tot].Y1 = v[i], seg[tot].Y2 = r[i],
    seg[tot].tag = -1, Y[tot] = r[i];
  }
  sort(Y + 1, Y + tot + 1);
  for (register int i = 1; i <= tot; ++i)
    if (Y[i] != Y[i + 1]) Y[++cnt] = Y[i];
  build(1, 1, cnt);
  sort(seg + 1, seg + tot + 1, cmp);
  for (register int i = 1; i <= tot; ++i) {
    modify(1, seg[i].Y1, seg[i].Y2, seg[i].tag);
    if (tree[1].gmax > ans) {
      ans = tree[1].gmax;
      ansx = seg[i].x;
      ansy = tree[1].pos;
    }
  }
  printf("%d\n", ans);
  for (register int i = 1; i <= n; ++i)
    if (v[i] <= ansy && r[i] >= ansy && l[i] <= ansx && v[i] >= ansx)
      printf("%d ", i);
  return 0;
}
