func_code_string: #include <bits/stdc++.h>   #pragma GCC optimize(2)   using namespace std;   namespace IO_Optimization {   inline int read() {     int X = 0, w = 0;     char ch = 0;     while (!isdigit(ch)) {       w |= ch ==  - ;       ch = getchar();     }     while (isdigit(ch)) {       X = (X << 3) + (X << 1) + (ch ^ 48);       ch = getchar();     }     return w ? -X : X;   }   inline void write(long long x) {     if (x < 0) putchar( - ), x = -x;     if (x > 9) write(x / 10);     putchar(x % 10 +  0 );   }   }  // namespace IO_Optimization   using namespace IO_Optimization;   int n, k;   double sum;   struct Node {     int num, pos;   } a[2000 + 2], b[2000 + 2];   struct Trans {     int s[2000 + 2];   } ans[2000 + 2];   int tot1, tot2;   inline bool cmp(Node x, Node y) { return x.num > y.num; }   int main() {     n = read(), k = read();     for (register int i = 1; i <= n; ++i) {       int x = read(), y = read();       if (y == 1)         a[++tot1].num = x, a[tot1].pos = i;       else         b[++tot2].num = x, b[tot2].pos = i;     }     sort(a + 1, a + 1 + tot1, cmp);     int noww = k - 1 < tot1 ? k - 1 : tot1;     for (register int i = 1; i <= noww; ++i) {       ans[i].s[++ans[i].s[0]] = a[i].pos;       sum += a[i].num * 0.5;     }     if (tot1 <= k - 1) {       for (register int i = 1; i <= tot2; ++i) {         int nowww = tot1 + i < k ? tot1 + i : k;         sum += b[i].num;         ans[nowww].s[++ans[nowww].s[0]] = b[i].pos;       }     } else {       int minn = 1e9;       for (register int i = k; i <= tot1; ++i) {         sum += a[i].num;         ans[k].s[++ans[k].s[0]] = a[i].pos;         minn = a[i].num < minn ? a[i].num : minn;       }       for (register int i = 1; i <= tot2; ++i) {         sum += b[i].num;         ans[k].s[++ans[k].s[0]] = b[i].pos;         minn = b[i].num < minn ? b[i].num : minn;       }       sum -= minn * 0.5;     }     printf( %.1lf n , sum);     for (register int i = 1; i <= k; ++i, puts(  )) {       write(ans[i].s[0]);       cout <<    ;       for (register int j = 1; j <= ans[i].s[0]; ++j) {         write(ans[i].s[j]);         cout <<    ;       }     }     return 0;   }   