#include <bits/stdc++.h>
using namespace std;
vector<int> v1[300005], v2[300005];
int L[100005], V[100005], R[100005];
int N, ans;
int a, b;
struct node {
  int x, w, c;
} s[1 << 20];
void build(int o, int l, int r) {
  s[o].c = s[o].x = 0;
  if (l == r) {
    s[o].w = l;
    return;
  }
  int mid = (l + r) >> 1;
  build((o << 1), l, mid);
  build((o << 1 | 1), mid + 1, r);
  s[o].w = s[(o << 1)].w;
}
void pushdown(int o) {
  s[(o << 1)].x += s[o].c;
  s[(o << 1 | 1)].x += s[o].c;
  s[(o << 1)].c += s[o].c;
  s[(o << 1 | 1)].c += s[o].c;
  s[o].c = 0;
}
void update(int o, int l, int r, int le, int re, int v) {
  if (l <= le && re <= r) {
    s[o].x += v;
    s[o].c += v;
    return;
  }
  if (s[o].c != 0) pushdown(o);
  int mid = (le + re) >> 1;
  if (r > mid) update((o << 1 | 1), l, r, mid + 1, re, v);
  if (l <= mid) update((o << 1), l, r, le, mid, v);
  if (s[(o << 1)].x < s[(o << 1 | 1)].x) {
    s[o].x = s[(o << 1 | 1)].x;
    s[o].w = s[(o << 1 | 1)].w;
  } else {
    s[o].x = s[(o << 1)].x;
    s[o].w = s[(o << 1)].w;
  }
}
int main() {
  scanf("%d", &N);
  for (int i = 0; i < N; i++) {
    scanf("%d%d%d", L + i, V + i, R + i);
    v1[L[i]].push_back(i);
    v2[V[i]].push_back(i);
  }
  build(1, 1, 3e5);
  for (int i = 1; i <= 3e5; i++) {
    for (int j = 0; j < v1[i].size(); j++) {
      update(1, V[v1[i][j]], R[v1[i][j]], 1, 3e5, 1);
    }
    if (ans < s[1].x) {
      ans = s[1].x, a = i, b = s[1].w;
    }
    for (int j = 0; j < v2[i].size(); j++) {
      update(1, i, R[v2[i][j]], 1, 3e5, -1);
    }
  }
  printf("%d\n", ans);
  for (int i = 0; i < N; i++) {
    if (L[i] <= a && a <= V[i] && V[i] <= b && b <= R[i]) printf("%d ", i + 1);
  }
  return 0;
}
