#include <bits/stdc++.h>

#define FO(i,a,b) for (int i = (a); i < (b); i++)
#define sz(v) int(v.size())

using namespace std;

int n, m;
int a[105];

bool cmp(int i, int j) {
    return i%2 > j%2;
}

int main() {
    scanf("%d %d", &n, &m);
    int nodd = 0;
    FO(i,0,m) {
        scanf("%d", a+i);
        if (a[i] % 2 == 1) nodd++;
    }
    if (nodd >= 3) {
        printf("Impossible\n");
        return 0;
    }
    if (m == 1) {
        printf("%d\n", a[0]);
        if (n == 1) printf("1\n1\n");
        else printf("2\n%d 1\n", a[0]-1);
        return 0;
    }

    sort(a,a+m,cmp);

    if (a[1]%2 == 1) {
        swap(a[1], a[m-1]);
    }
    FO(i,0,m) printf("%d%c", a[i], " \n"[i+1==m]);

    vector<int> r;
    if (a[0] > 1) r.push_back(a[0]-1);
    FO(i,1,m-1) {
        r.push_back(a[i]);
    }
    r.push_back(a[m-1]+1);
    printf("%d\n", sz(r));
    FO(i,0,sz(r)) printf("%d%c", r[i], " \n"[i+1==sz(r)]);
}
