#include <bits/stdc++.h>
using namespace std;
long long n, va[200005], vb[200005], res[200005], s[200005];
pair<long long, long long> a[200005], b[200005];
void add(long long l, long long r, long long x) {
  if (l < 0 && r < 0) {
    l += n;
    r += n;
  }
  if (l < 0) {
    s[l + n] += x;
    l = 0;
  }
  s[l] += x;
  s[r + 1] -= x;
}
signed main() {
  long long i, m, x, l, r, ql, qr, ans = 1e18, pos = 0;
  cin >> m >> n;
  for (i = 1; i <= n; i++) {
    cin >> a[i].first;
    a[i].second = i;
  }
  for (i = 1; i <= n; i++) {
    cin >> b[i].first;
    b[i].second = i;
  }
  sort(a + 1, a + n + 1);
  sort(b + 1, b + n + 1);
  for (i = 1; i <= n; i++) {
    va[i] = a[i].first;
    vb[i] = b[i].first;
  }
  for (i = 1; i <= n; i++) {
    x = b[i].first;
    if (x - 1 <= m - x + 1) {
      l = 1;
      r = x;
      ql = lower_bound(va + 1, va + n + 1, l) - va;
      qr = upper_bound(va + 1, va + n + 1, r) - va - 1;
      add(i - qr, i - ql, x);
    } else {
      l = x - m / 2;
      r = x;
      ql = lower_bound(va + 1, va + n + 1, l) - va;
      qr = upper_bound(va + 1, va + n + 1, r) - va - 1;
      add(i - qr, i - ql, x);
      r = l - 1;
      l = 1;
      ql = lower_bound(va + 1, va + n + 1, l) - va;
      qr = upper_bound(va + 1, va + n + 1, r) - va - 1;
      add(i - qr, i - ql, m - x);
    }
    if (m - x <= x) {
      l = x + 1;
      r = m;
      ql = lower_bound(va + 1, va + n + 1, l) - va;
      qr = upper_bound(va + 1, va + n + 1, r) - va - 1;
      add(i - qr, i - ql, -x);
    } else {
      l = x + 1;
      r = x + m / 2;
      ql = lower_bound(va + 1, va + n + 1, l) - va;
      qr = upper_bound(va + 1, va + n + 1, r) - va - 1;
      add(i - qr, i - ql, -x);
      l = r + 1;
      r = m;
      ql = lower_bound(va + 1, va + n + 1, l) - va;
      qr = upper_bound(va + 1, va + n + 1, r) - va - 1;
      add(i - qr, i - ql, m + x);
    }
  }
  for (i = 1; i <= n; i++) {
    x = a[i].first;
    if (x - 1 <= m - x + 1) {
      l = 1;
      r = x - 1;
      ql = lower_bound(vb + 1, vb + n + 1, l) - vb;
      qr = upper_bound(vb + 1, vb + n + 1, r) - vb - 1;
      add(ql - i, qr - i, x);
    } else {
      l = x - m / 2;
      r = x - 1;
      ql = lower_bound(vb + 1, vb + n + 1, l) - vb;
      qr = upper_bound(vb + 1, vb + n + 1, r) - vb - 1;
      add(ql - i, qr - i, x);
      r = l - 1;
      l = 1;
      ql = lower_bound(vb + 1, vb + n + 1, l) - vb;
      qr = upper_bound(vb + 1, vb + n + 1, r) - vb - 1;
      add(ql - i, qr - i, -x);
    }
    if (m - x <= x) {
      l = x;
      r = m;
      ql = lower_bound(vb + 1, vb + n + 1, l) - vb;
      qr = upper_bound(vb + 1, vb + n + 1, r) - vb - 1;
      add(ql - i, qr - i, -x);
    } else {
      l = x;
      r = x + m / 2;
      ql = lower_bound(vb + 1, vb + n + 1, l) - vb;
      qr = upper_bound(vb + 1, vb + n + 1, r) - vb - 1;
      add(ql - i, qr - i, -x);
      l = r + 1;
      r = m;
      ql = lower_bound(vb + 1, vb + n + 1, l) - vb;
      qr = upper_bound(vb + 1, vb + n + 1, r) - vb - 1;
      add(ql - i, qr - i, x);
    }
  }
  for (i = 0; i < n; i++) {
    if (i) s[i] += s[i - 1];
    if (s[i] < ans) {
      ans = s[i];
      pos = i;
    }
  }
  cout << ans << endl;
  for (i = 1; i <= n; i++) {
    if (i + pos <= n)
      res[a[i].second] = b[i + pos].second;
    else
      res[a[i].second] = b[i + pos - n].second;
  }
  for (i = 1; i <= n; i++) cout << res[i] << " ";
  puts("");
  return 0;
}
