#include <bits/stdc++.h>
using namespace std;
const int maxn = 3e5 + 10;
const int SS = maxn * 4;
int lazy[SS], seg[SS], pos[SS], n;
void upd(int v, int val) {
  seg[v] += val;
  lazy[v] += val;
}
void shift(int v) {
  upd(2 * v, lazy[v]);
  upd(2 * v + 1, lazy[v]);
  lazy[v] = 0;
}
void mrg(int v) {
  seg[v] = max(seg[2 * v], seg[2 * v + 1]);
  if (seg[v] == seg[2 * v])
    pos[v] = pos[2 * v];
  else
    pos[v] = pos[2 * v + 1];
}
void build(int v = 1, int l = 0, int r = n) {
  if (r - l == 1) {
    pos[v] = l;
    return;
  }
  int mid = r + l >> 1;
  build(2 * v, l, mid);
  build(2 * v + 1, mid, r);
  mrg(v);
}
void add(int x, int y, int val, int v = 1, int l = 0, int r = n) {
  if (x >= r || y <= l) return;
  if (x <= l && y >= r) {
    upd(v, val);
    return;
  }
  shift(v);
  int mid = r + l >> 1;
  add(x, y, val, 2 * v, l, mid);
  add(x, y, val, 2 * v + 1, mid, r);
  mrg(v);
}
int L[maxn], R[maxn], V[maxn];
int main() {
  ios::sync_with_stdio(0), cin.tie(0);
  n = 3e5 + 3;
  build();
  int m;
  cin >> m;
  vector<pair<pair<int, int>, pair<int, int>>> qu;
  for (int i = 0; i < m; i++) {
    int a, b, c;
    cin >> a >> b >> c;
    int x1 = a, x2 = b + 1;
    int def1 = b, y2 = c + 1;
    qu.push_back({{x1, +1}, {def1, y2}});
    qu.push_back({{x2, -1}, {def1, y2}});
    L[i] = a, R[i] = c + 1, V[i] = b;
  }
  int ans = 0, lef, rig;
  sort(qu.begin(), qu.end());
  for (int i = 0; i < qu.size(); i++) {
    if (!i || qu[i].first.first != qu[i - 1].first.first) {
      for (int j = i; j < qu.size() && qu[j].first.first == qu[i].first.first;
           j++)
        add(qu[j].second.first, qu[j].second.second, qu[j].first.second);
      if (seg[1] > ans) {
        ans = seg[1];
        lef = qu[i].first.first;
        rig = pos[1];
      }
    }
  }
  rig++;
  cout << ans << '\n';
  for (int i = 0; i < m; i++)
    if (L[i] <= lef && R[i] >= rig && V[i] >= lef && V[i] < rig)
      cout << i + 1 << " ";
  cout << '\n';
}
