#include <bits/stdc++.h>
using namespace std;
const int MAXN = 3e5 + 10;
int seg[4 * MAXN], lazy[4 * MAXN], mx[4 * MAXN], l[MAXN], r[MAXN], v[MAXN];
vector<int> lft[MAXN], rgt[MAXN];
void shift(int id) {
  seg[2 * id] += lazy[id];
  seg[2 * id + 1] += lazy[id];
  lazy[2 * id] += lazy[id];
  lazy[2 * id + 1] += lazy[id];
  lazy[id] = 0;
}
void upd(int id) {
  if (seg[2 * id] > seg[2 * id + 1]) {
    seg[id] = seg[2 * id];
    mx[id] = mx[2 * id];
  } else {
    seg[id] = seg[2 * id + 1];
    mx[id] = mx[2 * id + 1];
  }
}
void add(int l, int r, int val, int s, int e, int id) {
  if (s >= r || e <= l) {
    return;
  }
  if (s >= l && e <= r) {
    seg[id] += val;
    lazy[id] += val;
    if (mx[id] == -1) mx[id] = s;
    return;
  }
  int mid = (s + e) / 2;
  shift(id);
  add(l, r, val, s, mid, 2 * id);
  add(l, r, val, mid, e, 2 * id + 1);
  upd(id);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  memset(mx, -1, sizeof mx);
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> l[i] >> v[i] >> r[i];
    lft[l[i]].push_back(i);
    rgt[v[i]].push_back(i);
  }
  int bestval = -1, bestl, bestr;
  for (int i = 1; i < MAXN; i++) {
    for (auto j : lft[i]) {
      add(v[j], r[j] + 1, 1, 0, MAXN, 1);
    }
    if (seg[1] > bestval) {
      bestl = i;
      bestr = mx[1];
      bestval = seg[1];
    }
    for (auto j : rgt[i]) {
      add(v[j], r[j] + 1, -1, 0, MAXN, 1);
    }
  }
  cout << bestval << endl;
  for (int i = 0; i < n; i++) {
    if (l[i] <= bestl && v[i] >= bestl && v[i] <= bestr && r[i] >= bestr) {
      cout << i + 1 << ' ';
    }
  }
  cout << endl;
  return 0;
}
