def weighted_interval_scheduling_with_solution():
# 入力の読み込み
n = int(input())
jobs = []
for i in range(n):
s, f, v = map(int, input().split())
jobs.append((s, f, v, i + 1)) # 元の番号を保持
# 終了時刻でソート
jobs.sort(key=lambda x: x[1])
# p[i]: ジョブiと重ならない最大のインデックス
p = [-1] * n
for i in range(n):
for j in range(i - 1, -1, -1):
if jobs[j][1] <= jobs[i][0]:
p[i] = j
break
# 動的計画法
opt = [0] * (n + 1)
for i in range(1, n + 1):
# ジョブi-1を選ぶ場合
include = jobs[i-1][2]
if p[i-1] != -1:
include += opt[p[i-1] + 1]
else:
include += opt[0]
# ジョブi-1を選ぶ場合と選ばない場合の最大値
opt[i] = max(opt[i-1], include)
# 最適解の復元
def find_solution(i):
if i == 0:
return []
# ジョブi-1を選ぶ場合の価値
include = jobs[i-1][2]
if p[i-1] != -1:
include += opt[p[i-1] + 1]
else:
include += opt[0]
# ジョブi-1を選ぶ場合
if include >= opt[i-1]:
if p[i-1] != -1:
return find_solution(p[i-1] + 1) + [jobs[i-1][3]]
else:
return [jobs[i-1][3]]
# ジョブi-1を選ばない場合
else:
return find_solution(i-1)
solution = find_solution(n)
# 出力
print(solution)
# プログラムの実行
weighted_interval_scheduling_with_solution()
ZGVmIHdlaWdodGVkX2ludGVydmFsX3NjaGVkdWxpbmdfd2l0aF9zb2x1dGlvbigpOgogICAgIyDlhaXlipvjga7oqq3jgb/ovrzjgb8KICAgIG4gPSBpbnQoaW5wdXQoKSkKICAgIGpvYnMgPSBbXQogICAgZm9yIGkgaW4gcmFuZ2Uobik6CiAgICAgICAgcywgZiwgdiA9IG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkKICAgICAgICBqb2JzLmFwcGVuZCgocywgZiwgdiwgaSArIDEpKSAgIyDlhYPjga7nlarlj7fjgpLkv53mjIEKICAgIAogICAgIyDntYLkuobmmYLliLvjgafjgr3jg7zjg4gKICAgIGpvYnMuc29ydChrZXk9bGFtYmRhIHg6IHhbMV0pCiAgICAKICAgICMgcFtpXTog44K444On44OWaeOBqOmHjeOBquOCieOBquOBhOacgOWkp+OBruOCpOODs+ODh+ODg+OCr+OCuQogICAgcCA9IFstMV0gKiBuCiAgICBmb3IgaSBpbiByYW5nZShuKToKICAgICAgICBmb3IgaiBpbiByYW5nZShpIC0gMSwgLTEsIC0xKToKICAgICAgICAgICAgaWYgam9ic1tqXVsxXSA8PSBqb2JzW2ldWzBdOgogICAgICAgICAgICAgICAgcFtpXSA9IGoKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAKICAgICMg5YuV55qE6KiI55S75rOVCiAgICBvcHQgPSBbMF0gKiAobiArIDEpCiAgICBmb3IgaSBpbiByYW5nZSgxLCBuICsgMSk6CiAgICAgICAgIyDjgrjjg6fjg5ZpLTHjgpLpgbjjgbbloLTlkIgKICAgICAgICBpbmNsdWRlID0gam9ic1tpLTFdWzJdCiAgICAgICAgaWYgcFtpLTFdICE9IC0xOgogICAgICAgICAgICBpbmNsdWRlICs9IG9wdFtwW2ktMV0gKyAxXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGluY2x1ZGUgKz0gb3B0WzBdCiAgICAgICAgCiAgICAgICAgIyDjgrjjg6fjg5ZpLTHjgpLpgbjjgbbloLTlkIjjgajpgbjjgbDjgarjgYTloLTlkIjjga7mnIDlpKflgKQKICAgICAgICBvcHRbaV0gPSBtYXgob3B0W2ktMV0sIGluY2x1ZGUpCiAgICAKICAgICMg5pyA6YGp6Kej44Gu5b6p5YWDCiAgICBkZWYgZmluZF9zb2x1dGlvbihpKToKICAgICAgICBpZiBpID09IDA6CiAgICAgICAgICAgIHJldHVybiBbXQogICAgICAgIAogICAgICAgICMg44K444On44OWaS0x44KS6YG444G25aC05ZCI44Gu5L6h5YCkCiAgICAgICAgaW5jbHVkZSA9IGpvYnNbaS0xXVsyXQogICAgICAgIGlmIHBbaS0xXSAhPSAtMToKICAgICAgICAgICAgaW5jbHVkZSArPSBvcHRbcFtpLTFdICsgMV0KICAgICAgICBlbHNlOgogICAgICAgICAgICBpbmNsdWRlICs9IG9wdFswXQogICAgICAgIAogICAgICAgICMg44K444On44OWaS0x44KS6YG444G25aC05ZCICiAgICAgICAgaWYgaW5jbHVkZSA+PSBvcHRbaS0xXToKICAgICAgICAgICAgaWYgcFtpLTFdICE9IC0xOgogICAgICAgICAgICAgICAgcmV0dXJuIGZpbmRfc29sdXRpb24ocFtpLTFdICsgMSkgKyBbam9ic1tpLTFdWzNdXQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmV0dXJuIFtqb2JzW2ktMV1bM11dCiAgICAgICAgIyDjgrjjg6fjg5ZpLTHjgpLpgbjjgbDjgarjgYTloLTlkIgKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gZmluZF9zb2x1dGlvbihpLTEpCiAgICAKICAgIHNvbHV0aW9uID0gZmluZF9zb2x1dGlvbihuKQogICAgCiAgICAjIOWHuuWKmwogICAgcHJpbnQoc29sdXRpb24pCgojIOODl+ODreOCsOODqeODoOOBruWun+ihjAp3ZWlnaHRlZF9pbnRlcnZhbF9zY2hlZHVsaW5nX3dpdGhfc29sdXRpb24oKQ==