#include <bits/stdc++.h>

#define For(i, j, k) for (int i = j; i <= k; ++ i)
#define Forr(i, j, k) for (int i = j; i >= k; -- i)

using namespace std;

inline int read() {
	int x = 0, p = 1; char c = getchar();
	for (; !isdigit(c); c = getchar()) if (c == '-') p = -1;
	for (; isdigit(c); c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
	return x * p;
}

inline void File() {
	freopen("D.in", "r", stdin);
	freopen("D.out", "w", stdout);
}

const int N = 1e2 + 10;
int a[N], sta[N], tp, n, m, lst, sum, cnt, ans[N];

int main() {

	n = read(), m = read();
	For(i, 1, m) {
		a[i] = read();
		if (a[i] & 1) sta[++ tp] = i;
	}

	if (tp > 2) return puts("Impossible"), 0;

	if (tp > 0) swap(a[1], a[sta[1]]);
	if (tp > 1) swap(a[m], a[sta[2]]);


	if (m == 1) {
		if (a[1] == 1) return printf("1\n1\n1\n"), 0;
		return printf("%d\n2\n%d %d\n", a[1], a[1] - 1, 1), 0;
	}
	For(i, 1, m) printf("%d ", a[i]); puts("");

	ans[cnt = 1] = lst = a[1] - 1; sum = 1;
	For(i, 1, m) sum += a[i], ans[++ cnt] = sum - lst, lst = sum;
	ans[cnt] -= 1;

	int tt = 0; For(i, 1, cnt) if (ans[i] == 0) ++ tt;		

	printf("%d\n", cnt - tt);
	For(i, 1, cnt) if (ans[i]) printf("%d ", ans[i]); puts("");

	return 0;
}

#include<bits/stdc++.h>
#define ll long long
#define inf(x) (ll)(1e##x)
using namespace std;
template<typename tn> void read(tn &a){
	tn x=0,f=1; char c=' ';
	for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
	for(;isdigit(c);c=getchar()) x=x*10+c-'0';
	a=x*f;
}
int n,m;
vector<int> v[3];
int main(){
	read(n);read(m);
	for(int i=1;i<=m;i++){
		int x;read(x);
		v[x&1].push_back(x);
	}
	if(v[1].size()>2){puts("Impossible");return 0;}
	if(m==1){
		int p=v[0].size()?v[0][0]:v[1][0];
		cout<<p<<'\n';
		cout<<p/2+1<<'\n';
		if(p&1){
			for(int i=1;i<=p/2;i++) cout<<2<<' ';
			cout<<1<<'\n';
		}
		else{
			for(int i=1;i<=p/4;i++) cout<<2<<' ';
			cout<<1<<' ';
			for(int i=1;i<=(p-2)/4;i++) cout<<2<<' ';
			cout<<1<<'\n';
		}
		return 0;
	}
	if(v[1].size()) v[2].push_back(v[1][0]);
	for(int x:v[0]) v[2].push_back(x);
	if(v[1].size()>1) v[2].push_back(v[1][1]);
	for(int x:v[2]) cout<<x<<' ';cout<<'\n';
	cout<<v[2].size()-(v[2].back()==1)<<'\n';
	cout<<v[2][0]+1<<' ';
	for(int i=1;i+1<v[2].size();i++) cout<<v[2][i]<<' ';
	if(v[2].back()>1) cout<<v[2].back()-1<<'\n';
	return 0;
}