#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
struct worker {
  int l, r, v, id;
} work[maxn];
vector<pair<int, int> > vis[3 * maxn];
vector<pair<int, int> >::iterator it;
struct Segtree {
  int l, r, mx, pos, lazy;
} tree[12 * maxn];
bool cmp(const worker &a, const worker &b) { return a.v > b.v; }
inline void push_down(int id) {
  tree[id << 1].mx += tree[id].lazy;
  tree[id << 1 | 1].mx += tree[id].lazy;
  tree[id << 1].lazy += tree[id].lazy;
  tree[id << 1 | 1].lazy += tree[id].lazy;
  tree[id].lazy = 0;
}
inline void push_up(int id) {
  if (tree[id << 1].mx > tree[id << 1 | 1].mx) {
    tree[id].mx = tree[id << 1].mx;
    tree[id].pos = tree[id << 1].pos;
  } else {
    tree[id].mx = tree[id << 1 | 1].mx;
    tree[id].pos = tree[id << 1 | 1].pos;
  }
}
void build(int id, int l, int r) {
  tree[id].l = l;
  tree[id].r = r;
  tree[id].pos = l;
  tree[id].mx = tree[id].lazy = 0;
  if (l == r) return;
  int mid = (l + r) >> 1;
  build(id << 1, l, mid);
  build(id << 1 | 1, mid + 1, r);
}
void updata(int id, int l, int r, int v) {
  if (tree[id].l == l && tree[id].r == r) {
    tree[id].mx += v;
    tree[id].lazy += v;
    return;
  }
  if (tree[id].lazy) push_down(id);
  int mid = (tree[id].l + tree[id].r) >> 1;
  if (r <= mid)
    updata(id << 1, l, r, v);
  else if (l > mid)
    updata(id << 1 | 1, l, r, v);
  else {
    updata(id << 1, l, mid, v);
    updata(id << 1 | 1, mid + 1, r, v);
  }
  push_up(id);
}
int main() {
  int n, i, j, mx = -0x3f3f3f3f;
  scanf("%d", &n);
  for (i = 0; i < n; ++i) {
    scanf("%d%d%d", &work[i].l, &work[i].v, &work[i].r);
    work[i].id = i + 1;
    mx = max(mx, work[i].r);
  }
  sort(work, work + n, cmp);
  int L, R, cnt = 0;
  build(1, 1, mx);
  for (i = 0, j = mx; i < n; ++i) {
    updata(1, work[i].v, work[i].r, 1);
    vis[work[i].l].push_back(make_pair(work[i].v, work[i].r));
    for (; j > work[i].v; --j) {
      for (it = vis[j].begin(); it != vis[j].end(); ++it) {
        updata(1, it->first, it->second, -1);
      }
    }
    if (tree[1].mx > cnt) {
      cnt = tree[1].mx;
      L = work[i].v;
      R = tree[1].pos;
    }
  }
  printf("%d\n", cnt);
  for (i = 0; i < n; ++i)
    if (L <= work[i].v && L >= work[i].l && R >= work[i].v && R <= work[i].r)
      printf("%d ", work[i].id);
  return 0;
}
