#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 7;
const long long INFLL = 1e18 + 7;
const int maxN = 3e5;
const int maxM = 1e5 + 9;
int N;
int L[4 * (maxN + 9)], H[4 * (maxN + 9)], IT[4 * (maxN + 9)],
    Lazy[4 * (maxN + 9)];
int l[maxM], r[maxM], v[maxM];
vector<int> vec1[maxN + 9], vec2[maxN + 9];
void enter() {
  cin >> N;
  for (int i = (1), _b = (N); i <= _b; i++) {
    cin >> l[i] >> v[i] >> r[i];
    vec1[l[i]].push_back(i);
    vec2[v[i]].push_back(i);
  }
}
void Build(int x, int low, int high) {
  L[x] = low;
  H[x] = high;
  if (L[x] == H[x])
    return;
  else {
    int mid = (low + high) >> 1;
    Build(x * 2, low, mid);
    Build((x * 2) + 1, mid + 1, high);
  }
}
void LazyUpDate(int x) {
  if (Lazy[x] == 0) return;
  Lazy[x * 2] += Lazy[x];
  Lazy[(x * 2) + 1] += Lazy[x];
  IT[x * 2] += Lazy[x];
  IT[(x * 2) + 1] += Lazy[x];
  Lazy[x] = 0;
}
void UpDate(int x, int i, int j, int val) {
  if (L[x] > j || H[x] < i) return;
  if (i <= L[x] && H[x] <= j) {
    IT[x] += val;
    Lazy[x] += val;
  } else {
    LazyUpDate(x);
    UpDate(x * 2, i, j, val);
    UpDate((x * 2) + 1, i, j, val);
    IT[x] = max(IT[x * 2], IT[(x * 2) + 1]);
  }
}
int Query(int x, int i, int j) {
  if (L[x] > j || H[x] < i) return 0;
  if (i <= L[x] && H[x] <= j) return IT[x];
  LazyUpDate(x);
  int result = max(Query(x * 2, i, j), Query((x * 2) + 1, i, j));
  return result;
}
void process() {
  int ans = 0, xsave, ysave;
  Build(1, 1, maxN);
  for (int u = (1), _b = (maxN); u <= _b; u++) {
    for (auto vv : vec1[u]) UpDate(1, v[vv], r[vv], 1);
    for (auto vv : vec2[u - 1]) UpDate(1, v[vv], r[vv], -1);
    if (ans < Query(1, 1, maxN)) {
      ans = Query(1, 1, maxN);
      xsave = u;
    }
  }
  memset((IT), (0), sizeof(IT));
  memset((Lazy), (0), sizeof(Lazy));
  for (int u = (1), _b = (xsave); u <= _b; u++) {
    for (auto vv : vec1[u]) UpDate(1, v[vv], r[vv], 1);
    for (auto vv : vec2[u - 1]) UpDate(1, v[vv], r[vv], -1);
  }
  for (int i = (1), _b = (maxN); i <= _b; i++) {
    if (Query(1, i, i) == ans) {
      ysave = i;
      break;
    }
  }
  cout << ans << endl;
  for (int i = (1), _b = (N); i <= _b; i++)
    if (l[i] <= xsave && xsave <= v[i] && v[i] <= ysave && ysave <= r[i])
      cout << i << " ";
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  enter();
  process();
}
