#include <bits/stdc++.h>
using namespace std;
const int N = 3e5, M = 1e5;
int n, it[4 * N], tr[4 * N], add[4 * N], res, m, k, l[M + 5], v[M + 5],
    r[M + 5];
vector<int> a[N + 5], b[N + 5];
void upd(int node, int l, int r, int p, int q, int val) {
  if (!tr[node]) tr[node] = l;
  if (l > q || r < p || l > r) return;
  if (p <= l && r <= q) {
    it[node] += val;
    add[node] += val;
    return;
  }
  upd(node * 2, l, (l + r) / 2, p, q, val);
  upd(node * 2 + 1, (l + r) / 2 + 1, r, p, q, val);
  if (it[node * 2 + 1] < it[node * 2])
    it[node] = it[node * 2], tr[node] = tr[node * 2];
  else
    it[node] = it[node * 2 + 1], tr[node] = tr[node * 2 + 1];
  it[node] += add[node];
}
void input() {
  cin >> n;
  for (int i = 1; i <= n; ++i) {
    cin >> l[i] >> v[i] >> r[i];
    a[l[i]].push_back(i);
    b[v[i]].push_back(i);
  }
}
void solve() {
  for (int i = 1; i <= N; ++i) {
    for (int j = 0; j < a[i].size(); ++j)
      upd(1, 1, N, v[a[i][j]], r[a[i][j]], 1);
    if (res < it[1]) res = it[1], m = tr[1], k = i;
    for (int j = 0; j < b[i].size(); ++j)
      upd(1, 1, N, v[b[i][j]], r[b[i][j]], -1);
  }
  printf("%d\n", res);
  for (int i = 1; i <= n; ++i)
    if (l[i] <= k && k <= v[i] && v[i] <= m && r[i] >= m) printf("%d ", i);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  input();
  solve();
}
