#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 5;
int ll[N], rr[N], vv[N];
struct quer {
  int mk, l, r, val, sh;
};
vector<quer> query;
bool cmp(quer a, quer b) {
  return a.mk < b.mk || (a.mk == b.mk && a.val < b.val);
}
int mx[4 * N];
int mmx[4 * N];
int lazy[4 * N];
bool hast[N];
void add(int v, int l, int r, int val) {
  if (mmx[v] == 0) mmx[v] = l;
  mx[v] += val;
  lazy[v] += val;
}
void shift(int v, int l, int r) {
  int mid = (r + l) / 2;
  add(2 * v, l, mid, lazy[v]);
  add(2 * v + 1, mid, r, lazy[v]);
  lazy[v] = 0;
}
void update(int v, int l, int r, int s, int e, int val) {
  if (e <= l || r <= s) return;
  if (s <= l && r <= e) {
    add(v, l, r, val);
    return;
  }
  shift(v, l, r);
  int mid = (r + l) / 2;
  update(2 * v, l, mid, s, e, val);
  update(2 * v + 1, mid, r, s, e, val);
  mx[v] = max(mx[2 * v], mx[2 * v + 1]);
  if (mx[2 * v] > mx[2 * v + 1])
    mmx[v] = mmx[2 * v];
  else
    mmx[v] = mmx[2 * v + 1];
}
int main() {
  ios_base::sync_with_stdio(0);
  int n;
  cin >> n;
  int l, r, v;
  for (int i = 1; i <= n; i++) {
    cin >> l >> v >> r;
    ll[i] = l;
    vv[i] = v;
    rr[i] = r;
    quer tmp;
    tmp.mk = v;
    tmp.sh = i;
    tmp.l = l;
    tmp.r = v;
    tmp.val = 1;
    query.push_back(tmp);
    tmp.mk = r + 1;
    tmp.val = -1;
    query.push_back(tmp);
  }
  sort((query).begin(), (query).end(), cmp);
  int ans = 0;
  int t = 0;
  for (quer p : query) {
    update(1, 1, N - 1, p.l, p.r + 1, p.val);
    if (mx[1] > ans) {
      ans = mx[1];
      t = mmx[1];
    }
  }
  memset(lazy, 0, sizeof(lazy));
  memset(mx, 0, sizeof(mx));
  memset(mmx, 0, sizeof(mmx));
  cout << ans << endl;
  for (quer p : query) {
    update(1, 1, N - 1, p.l, p.r + 1, p.val);
    if (p.val == 1)
      hast[p.sh] = 1;
    else
      hast[p.sh] = 0;
    if (mx[1] == ans) {
      t = mmx[1];
      for (int i = 1; i <= n; i++)
        if (rr[i] >= t && vv[i] >= t && ll[i] <= t && hast[i]) cout << i << " ";
      return 0;
    }
  }
}
