#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

void permute(int, int, int[], int[]);

int max(int a, int b)
{
    return (a > b ? a : b);
}

int main()
{
    int s, n;
    FILE *in = fopen("input.txt", "r"), *out = fopen("output.txt", "w");
    assert(fscanf(in, "%d%d", &s, &n) == 2);

    int *val = (int*)calloc(n, sizeof(int));
    int *ris = (int*)calloc(n, sizeof(int));

    for(int i=0; i<n; ++i)
        assert(fscanf(in, "%d", val + i) == 1);

    permute(s, n, val, ris);

    for(int i = 0; i < n; ++i)
        fprintf(out, "%d ", ris[i]);
    fprintf(out, "\n");

    int worst = 0;
    for(int i = 0; i < n - 1; ++i)
        worst = max(worst, ris[i] + ris[i + 1]);
    fprintf(out, "%d\n", worst);

    free(val);
    free(ris);

    fclose(in);
    fclose(out);

    return EXIT_SUCCESS;
}
