#include <bits/stdc++.h>
using namespace std;
const long long N = 4e5 + 100, OO = 1e6 + 10, M = 1e9 + 7, lg = 22;
long long l[N * 8], r[N * 8], v[N * 8];
pair<long long, long long> seg[N * 8];
long long lazy[N * 8];
vector<pair<long long, pair<long long, long long> > > rec[N * 8];
void shift(long long c) {
  seg[2 * c].first += lazy[c];
  seg[2 * c + 1].first += lazy[c];
  lazy[2 * c] += lazy[c];
  lazy[2 * c + 1] += lazy[c];
  lazy[c] = 0;
}
void build(long long c, long long b, long long e) {
  seg[c].second = b;
  if (e - b == 1) return;
  long long mid = (b + e) / 2;
  build(2 * c, b, mid);
  build(2 * c + 1, mid, e);
}
void upd(long long c, long long b, long long e, long long l, long long r,
         long long q) {
  if (b == l && e == r) {
    seg[c].first += q;
    lazy[c] += q;
    return;
  }
  shift(c);
  long long mid = (b + e) / 2;
  if (r <= mid)
    upd(2 * c, b, mid, l, r, q);
  else if (l >= mid)
    upd(2 * c + 1, mid, e, l, r, q);
  else {
    upd(2 * c, b, mid, l, mid, q);
    upd(2 * c + 1, mid, e, mid, r, q);
  }
  seg[c].first = max(seg[2 * c].first, seg[2 * c + 1].first);
  if (seg[c].first == seg[2 * c].first)
    seg[c].second = seg[2 * c].second;
  else
    seg[c].second = seg[2 * c + 1].second;
}
int32_t main() {
  long long n;
  cin >> n;
  for (long long i = 0; i < n; i++) {
    cin >> l[i] >> v[i] >> r[i];
    rec[l[i]].push_back({1, {v[i], r[i]}});
    rec[v[i] + 1].push_back({-1, {v[i], r[i]}});
  }
  build(1, 0, N);
  pair<long long, pair<long long, long long> > ans = {0, {0, 0}};
  for (long long i = 0; i < N; i++) {
    for (auto u : rec[i])
      upd(1, 0, N, u.second.first, u.second.second + 1, u.first);
    if (ans.first < seg[1].first) ans = {seg[1].first, {i, seg[1].second}};
  }
  cout << ans.first << endl;
  for (long long i = 0; i < n; i++) {
    if (l[i] <= ans.second.first && ans.second.first <= v[i] &&
        v[i] <= ans.second.second && ans.second.second <= r[i])
      cout << i + 1 << " ";
  }
  return 0;
}
