#include <bits/stdc++.h>
using namespace std;
int n, tot, mx;
struct line {
  int x, y1, y2, sign;
} L[300005];
int l[300005], v[300005], r[300005], add[300005 << 2], Max[300005 << 2];
bool operator<(const line &p, const line &q) {
  return p.x == q.x ? p.sign > q.sign : p.x < q.x;
}
void ADD(int root, int val) { add[root] += val, Max[root] += val; }
void pushdown(int root) {
  if (!add[root]) return;
  ADD(root << 1, add[root]), ADD(root << 1 | 1, add[root]);
  add[root] = 0;
}
void modify(int root, int l, int r, int x, int y, int val) {
  if (l >= x && r <= y) {
    ADD(root, val);
    return;
  }
  int mid = (l + r) >> 1;
  pushdown(root);
  if (x <= mid) modify(root << 1, l, mid, x, y, val);
  if (y > mid) modify(root << 1 | 1, mid + 1, r, x, y, val);
  Max[root] = max(Max[root << 1], Max[root << 1 | 1]);
}
int find(int root, int l, int r, int x) {
  if (l == r) return l;
  int mid = (l + r) >> 1;
  pushdown(root);
  if (Max[root << 1] == x) return find(root << 1, l, mid, x);
  return find(root << 1 | 1, mid + 1, r, x);
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) {
    scanf("%d%d%d", &l[i], &v[i], &r[i]);
    L[++tot] = (line){l[i], v[i], r[i], 1},
    L[++tot] = (line){v[i], v[i], r[i], -1};
    mx = max(mx, r[i]);
  }
  sort(L + 1, L + tot + 1);
  int ans = 0, posx, posy;
  for (int i = 1; i <= tot; ++i) {
    modify(1, 1, mx, L[i].y1, L[i].y2, L[i].sign);
    if (ans < Max[1]) ans = Max[1], posx = L[i].x, posy = find(1, 1, mx, ans);
  }
  printf("%d\n", ans);
  for (int i = 1; i <= n; ++i)
    if ((l[i] <= posx && v[i] >= posx) && (v[i] <= posy && r[i] >= posy))
      printf("%d ", i);
  return 0;
}
