#include <bits/stdc++.h>   const double PI =       3.141592653589793238462643383279502884197169399375105820974944;   using namespace std;   const int MOD = 1e9 + 7;   double gcd(double a, double b) { return a < 0.01 ? b : gcd(fmod(b, a), a); }   template <typename T>   T mymax(T a, T b) {     return (a > b) ? a : b;   }   template <typename T>   T mymax(T a, T b, T c) {     return mymax(a, mymax(b, c));   }   template <typename T>   T mymin(T a, T b) {     return (a < b) ? a : b;   }   template <typename T>   T mymin(T a, T b, T c) {     return mymin(a, mymin(b, c));   }   template <typename T>   T power(T x, T y) {     T res = 1;     x = x % MOD;     while (y > 0) {       if (y & 1) res = (res * x) % MOD;       y = y >> 1;       x = (x * x) % MOD;     }     return res;   }   template <typename T>   void swap(T *x, T *y) {     T temp;     temp = *y;     *y = *x;     *x = temp;   }   template <typename T>   T mod(T a) {     if (a > 0)       return a;     else       return -a;   }   template <typename T>   T logg(T a) {     T x = 0;     while (a > 1) {       x++;       a /= 2;     }     return x;   }   typedef struct trie {     int a, b, c;     trie(int p1, int p2, int p3) { a = p1, b = p2, c = p3; }   } tri;   bool operator<(tri p, tri q) {     if (p.a < q.a) {       return 1;     } else if (p.a > q.a)       return 0;     else {       return (p.b < q.b);     }   }   int main() {     ios::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     ;     int n, k1;     cin >> n >> k1;     multiset<pair<int, int>> k;     vector<int> l(n), r(n);     vector<tri> p;     for (int i = 1; i <= n; i++) {       cin >> l[i - 1] >> r[i - 1];       p.push_back({l[i - 1], -1, i - 1});       p.push_back({r[i - 1], 1, i - 1});     }     int c = 0;     sort(p.begin(), p.end());     vector<int> ans;     for (tri p1 : p) {       int a1 = p1.a, b1 = p1.b, c1 = p1.c;       if (b1 == -1) {         k.insert({r[c1], c1});         c++;         if (c > k1) {           pair<int, int> pk = *k.rbegin();           k.erase(k.find(pk));           ans.push_back(pk.second);           c--;         }       } else {         if (k.count({r[c1], c1})) {           c--;           k.erase(k.find({r[c1], c1}));         }       }     }     cout << ans.size() <<   n ;     for (int pk : ans) {       cout << pk + 1 <<    ;     }     cout <<   n ;     return 0;   }   