func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 200005;   struct Node {     int pos, id;     Node(int p = 0, int i = 0) : pos(p), id(i) {}     bool operator<(const Node& rhs) const { return pos < rhs.pos; }   } a[MAXN], b[MAXN];   int m, n;   long long c[3 * MAXN];   int ans[MAXN];   void add(int x, int y, int k) { c[x + n] += k, c[y + n] -= k; }   int main() {     scanf( %d%d , &m, &n);     for (int i = 0; i < n; i++) {       scanf( %d , &a[i].pos);       a[i].pos--, a[i].id = i + 1;     }     for (int i = 0; i < n; i++) {       scanf( %d , &b[i].pos);       b[i].pos--, b[i].id = i + 1;     }     sort(a, a + n);     sort(b, b + n);     for (int i = 0; i < n; i++) {       int j = lower_bound(b, b + n, a[i]) - b - i;       int p = a[i].pos + (m + 1) / 2;       if (p < m) {         int k = lower_bound(b, b + n, Node(p)) - b - i;         add(j, k, -a[i].pos);         add(k, n - i, a[i].pos + m);         add(n - i, j + n, a[i].pos);       } else {         int k = lower_bound(b, b + n, Node(p - m)) - b - i;         add(j, n - i, -a[i].pos);         add(n - i, k + n, m - a[i].pos);         add(k + n, j + n, a[i].pos);       }     }     for (int i = 0; i < n; i++) {       int j = i - (upper_bound(a, a + n, b[i]) - a - 1);       int p = b[i].pos - (m + 1) / 2;       if (p >= 0) {         int k = i - (upper_bound(a, a + n, Node(p)) - a - 1);         add(j, k, b[i].pos);         add(k, j + n, -b[i].pos);       } else {         int k = i - (upper_bound(a, a + n, Node(p + m)) - a - 1);         add(j, k + n, b[i].pos);         add(k + n, j + n, -b[i].pos);       }     }     for (int i = 1; i < 3 * n; i++) c[i] += c[i - 1];     for (int i = 0; i < n; i++) c[i] += c[i + n] + c[i + 2 * n];     int p = min_element(c, c + n) - c;     printf( %lld n , c[p]);     for (int i = 0; i < n; i++) ans[a[i].id] = b[(i + p) % n].id;     for (int i = 1; i <= n; i++) printf( %d  , ans[i]);     putchar(  n );     return 0;   }   