func_code_string: #include <bits/stdc++.h>   using namespace std;   pair<int, int> seg[2100000], lazy[2100000];   pair<int, int> Merge(pair<int, int> l, pair<int, int> r) {     if (l < r)       return l;     else       return r;   }   void Propagate(int n, int l, int r) {     if (lazy[n] != make_pair(0x3f3f3f3f, 0)) {       if (l != r) {         lazy[n << 1] = Merge(lazy[n << 1], lazy[n]);         lazy[n << 1 | 1] = Merge(lazy[n << 1 | 1], lazy[n]);       }       seg[n] = Merge(seg[n], lazy[n]);       lazy[n] = make_pair(0x3f3f3f3f, 0);     }   }   pair<int, int> Update(int L, int R, pair<int, int> val, int n, int l, int r) {     Propagate(n, l, r);     if (r < L || R < l) return seg[n];     if (L <= l && r <= R) {       lazy[n] = Merge(lazy[n], val);       Propagate(n, l, r);       return seg[n];     }     int mid = l + r >> 1;     return seg[n] = Merge(Update(L, R, val, n << 1, l, mid),                           Update(L, R, val, n << 1 | 1, mid + 1, r));   }   pair<int, int> Query(int L, int R, int n, int l, int r) {     Propagate(n, l, r);     if (r < L || R < l) return make_pair(0x3f3f3f3f, 0);     if (L <= l && r <= R) return seg[n];     int mid = l + r >> 1;     return Merge(Query(L, R, n << 1, l, mid),                  Query(L, R, n << 1 | 1, mid + 1, r));   }   int N, M;   vector<pair<int, int> > v[300001];   pair<int, int> dp[300001];   int main() {     for (int i = 0; i < 2100000; i++) seg[i] = lazy[i] = make_pair(0x3f3f3f3f, 0);     ios::sync_with_stdio(0);     cin.tie(0);     cin.exceptions(ios::badbit | ios::failbit);     cin >> N >> M;     vector<int> com;     for (int i = 1; i <= M; i++) {       int n, l, r;       cin >> n >> l >> r;       r++;       v[n].push_back({l, r});       com.push_back(l);       com.push_back(r);     }     sort(com.begin(), com.end());     com.erase(unique(com.begin(), com.end()), com.end());     for (int i = 1; i <= N; i++)       for (auto &[l, r] : v[i]) {         l = lower_bound(com.begin(), com.end(), l) - com.begin();         r = lower_bound(com.begin(), com.end(), r) - com.begin();       }     for (int i = 1; i <= N; i++) {       dp[i] = {i - 1, 0};       for (auto [l, r] : v[i]) {         auto it = Query(l, r - 1, 1, 0, (int)com.size() - 1);         dp[i] = min(dp[i], make_pair(it.first + i, it.second));       }       for (auto [l, r] : v[i]) {         Update(l, r - 1, make_pair(dp[i].first - i - 1, i), 1, 0,                (int)com.size() - 1);       }     }     int res = 0x3f3f3f3f, n = 0;     for (int i = 1; i <= N; i++) {       int val = dp[i].first + (N - i);       if (res > val) res = val, n = i;     }     set<int> s;     for (int i = 1; i <= N; i++) s.insert(i);     while (n) {       s.erase(n);       n = dp[n].second;     }     cout << res <<   n ;     if (res) {       for (int i : s) cout << i <<    ;       cout <<   n ;     }     return 0;   }   