#include <iostream>
#include <queue>
#include <map>
#include <vector>
#include <algorithm>
int main () {
	std::queue<std::vector<int>> que;
	std::map<std::vector<int>, int> dist;
	std::map<std::vector<int>, std::vector<int>> par;
	size_t sz;
	std::cin >> sz;
	std::vector<int> st(sz);
	int n = 0;
	for(size_t i = 0;i<sz;i++) {
		std::cin >> st[i];
		n=std::max(n, st[i]);
	}
	que.push(st);
	dist[st]=0;
	reverse(st.begin(), st.end());
	int ls=0;
	while(que.size()) {
		auto at = que.front();
		que.pop();
		{
			auto rev = at;
			std::reverse(rev.begin(), rev.end());
			if(dist.find(rev)!=dist.end()) {
				std::cout << dist[rev]+dist[at] << std::endl;
				std::vector<std::vector<int>> res;
				while(at.size()) {
					res.push_back(at);
					at=par[at];
				}
				std::reverse(res.begin(), res.end());
				rev=par[rev];
				while(rev.size()) {
					std::reverse(rev.begin(), rev.end());
					res.push_back(rev);
					std::reverse(rev.begin(), rev.end());
					rev=par[rev];
				}
				for(auto i:res) {
					for(int j:i)std::cout << j << " ";
					std::cout << "\n";
				}
				return 0;
			}
		}
		bool used[n+1];
		for(int i = 0;i<=n;i++)used[i]=0;
		for(size_t j = 0;j<at.size();j++)used[at[j]]=1;
		for(size_t j = 0;j<at.size();j++) {
			if(at[j]) {
				for(int k = 1;k<at[j];k++) {
					if(used[k] or used[at[j]-k] or at[j]-k==k)continue;
					std::vector<int> tmp;
					for(size_t m = 0;m<j;m++)tmp.push_back(at[m]);
					tmp.push_back(k);
					tmp.push_back(at[j]-k);
					for(size_t m = j+1;m<at.size();m++)tmp.push_back(at[m]);
					if(dist.find(tmp)!=dist.end())continue;
					dist[tmp]=dist[at]+1;
					par[tmp]=at;
					que.push(tmp);
				}
			}
		}
		for(size_t j = 0;j+1<at.size();j++) {
			if(at[j]+at[j+1]<=n and used[at[j]+at[j+1]]==0) {
				std::vector<int> tmp;
				for(size_t m = 0;m<j;m++)tmp.push_back(at[m]);
				tmp.push_back(at[j]+at[j+1]);
				for(size_t m = j+2;m<at.size();m++)tmp.push_back(at[m]);
				if(dist.find(tmp)!=dist.end())continue;
				dist[tmp]=dist[at]+1;
				par[tmp]=at;
				que.push(tmp);
			}
		}
	}
	return 0;
}
