//2018.9.20 by ljz
#include<bits/stdc++.h>
using namespace std;
#define res register int
#define LL long long
#define inf 0x3f3f3f3f
#define eps 1e-15
inline int read(){
    res s=0;
    bool w=0;
    char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')w=1;ch=getchar();}
    while(ch>='0'&&ch<='9')s=s*10+ch-'0',ch=getchar();
    return w?-s:s;
}
inline void _swap(res &x,res &y){
    x^=y^=x^=y;
}
inline int _abs(const res &x){
    return x>0?x:-x;
}
inline int _max(const res &x,const res &y){
    return x>y?x:y;
}
const int N=1e5+10;
namespace MAIN{
    int n,m;
    int a[N],b[N],bx;
    inline void MAIN(){
        n=read(),m=read();
        for(res i=1;i<=m;i++)a[i]=read();
        if(m==1)b[++bx]=1,b[++bx]=n-1;
        else {
            res cnt=0;
            for(res i=1;i<=m;i++)cnt+=a[i]&1;
            if(cnt>2){puts("Impossible");return;}
            for(res i=2;i<m;i++)
                if(a[i]&1){
                    if(a[1]&1)_swap(a[i],a[m]);
                    else _swap(a[1],a[i]);
                }
            b[++bx]=a[m]+1;
            for(res i=m-1;i>1;i--)b[++bx]=a[i];
            b[++bx]=a[1]-1;
        }
        for(res i=1;i<=m;i++)printf("%d ",a[i]);
        puts("");
        if(!b[bx])bx--;
        printf("%d\n",bx);
        for(res i=bx;i>=1;i--)printf("%d ",b[i]);
    }
}
int main(){
    MAIN::MAIN();
    return 0;
}