#include <iostream>
#include <numeric>
#include <vector>
using namespace std;
vector<int> arr;
vector<int> arr1;
vector<int> arr2;
int qq = 0;
bool checkSum(int sumLeft[], int k)
{
int r = true;
for (int i = 0; i < k; i++)
{
if (sumLeft[i] != 0)
r = false;
}
return r;
}
bool subsetSum(int S[], int n, int sumLeft[], int A[], int k)
{
if (checkSum(sumLeft, k))
return true;
if (n < 0)
return false;
bool res = false;
for (int i = 0; i < k; i++)
{
if (!res && (sumLeft[i] - S[n]) >= 0)
{
A[n] = i + 1;
sumLeft[i] = sumLeft[i] - S[n];
res = subsetSum(S, n - 1, sumLeft, A, k);
sumLeft[i] = sumLeft[i] + S[n];
}
}
return res;
}
void partition(int S[], int n, int k)
{
if (n < k)
{
std::cout << -1;
qq = 1;
return;
}
int sum = std::accumulate(S, S + n, 0);
int A[n], sumLeft[k];
for (int i = 0; i < k; i++)
sumLeft[i] = sum/k;
bool res = !(sum % k) && subsetSum(S, n - 1, sumLeft, A, k);
if (!res)
{
std::cout << -1;
qq = 1;
return;
}
int q = 0,q1 = 0,q2 = 0,z;
for (int i = 0; i < k; i++)
{
for (int j = 0; j < n; j++) {
if (A[j] == i+1 && i==0){
arr.push_back(S[j]);
}
if (A[j] == i+1 && i==1){
arr1.push_back(S[j]);
}
if (A[j] == i+1 && i==2){
arr2.push_back(S[j]);
}
}
}
}
int main()
{
int n;
cin >> n;
int a[n];
for (int i=0;i<n;i++){
cin>>a[i];
}
partition(a, n, 3);
if (qq != 1) {
cout << arr.size() << " " << arr1.size() << " " << arr2.size() << endl;
for (int i = 0; i <= arr.size()-1; i++) {
cout << arr[i] << " ";
}
cout << endl;
for (int i = 0; i <= arr1.size()-1; i++) {
cout << arr1[i] << " ";
}
cout << endl;
for (int i = 0; i <= arr2.size()-1; i++) {
cout << arr2[i] << " ";
}
}
return 0;
}
77u/I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bnVtZXJpYz4KI2luY2x1ZGUgPHZlY3Rvcj4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdmVjdG9yPGludD4gYXJyOwp2ZWN0b3I8aW50PiBhcnIxOwp2ZWN0b3I8aW50PiBhcnIyOwppbnQgcXEgPSAwOwpib29sIGNoZWNrU3VtKGludCBzdW1MZWZ0W10sIGludCBrKQp7CglpbnQgciA9IHRydWU7Cglmb3IgKGludCBpID0gMDsgaSA8IGs7IGkrKykKCXsKCQlpZiAoc3VtTGVmdFtpXSAhPSAwKQoJCQlyID0gZmFsc2U7Cgl9CglyZXR1cm4gcjsKfQpib29sIHN1YnNldFN1bShpbnQgU1tdLCBpbnQgbiwgaW50IHN1bUxlZnRbXSwgaW50IEFbXSwgaW50IGspCnsKCWlmIChjaGVja1N1bShzdW1MZWZ0LCBrKSkKCQlyZXR1cm4gdHJ1ZTsKCWlmIChuIDwgMCkKCQlyZXR1cm4gZmFsc2U7Cglib29sIHJlcyA9IGZhbHNlOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBrOyBpKyspCgl7CgkJaWYgKCFyZXMgJiYgKHN1bUxlZnRbaV0gLSBTW25dKSA+PSAwKQoJCXsKCQkJQVtuXSA9IGkgKyAxOwoJCQlzdW1MZWZ0W2ldID0gc3VtTGVmdFtpXSAtIFNbbl07CgkJCXJlcyA9IHN1YnNldFN1bShTLCBuIC0gMSwgc3VtTGVmdCwgQSwgayk7CgkJCXN1bUxlZnRbaV0gPSBzdW1MZWZ0W2ldICsgU1tuXTsKCQl9Cgl9CglyZXR1cm4gcmVzOwp9CnZvaWQgcGFydGl0aW9uKGludCBTW10sIGludCBuLCBpbnQgaykKewoJaWYgKG4gPCBrKQoJewoJCXN0ZDo6Y291dCA8PCAtMTsKCQlxcSA9IDE7CgkJcmV0dXJuOwoJfQoJaW50IHN1bSA9IHN0ZDo6YWNjdW11bGF0ZShTLCBTICsgbiwgMCk7CiAJaW50IEFbbl0sIHN1bUxlZnRba107Cglmb3IgKGludCBpID0gMDsgaSA8IGs7IGkrKykKCQlzdW1MZWZ0W2ldID0gc3VtL2s7Cglib29sIHJlcyA9ICEoc3VtICUgaykgJiYgc3Vic2V0U3VtKFMsIG4gLSAxLCBzdW1MZWZ0LCBBLCBrKTsKCWlmICghcmVzKQoJewoJCXN0ZDo6Y291dCA8PCAtMTsKCQlxcSA9IDE7CgkJcmV0dXJuOwoJfQoJaW50IHEgPSAwLHExID0gMCxxMiA9IDAsejsKCWZvciAoaW50IGkgPSAwOyBpIDwgazsgaSsrKQoJewoJCWZvciAoaW50IGogPSAwOyBqIDwgbjsgaisrKSB7CgkJCWlmIChBW2pdID09IGkrMSAmJiBpPT0wKXsKCQkJCWFyci5wdXNoX2JhY2soU1tqXSk7CgkJCX0KCQkJaWYgKEFbal0gPT0gaSsxICYmIGk9PTEpewoJCQkJYXJyMS5wdXNoX2JhY2soU1tqXSk7CgkJCX0KCQkJaWYgKEFbal0gPT0gaSsxICYmIGk9PTIpewoJCQkJYXJyMi5wdXNoX2JhY2soU1tqXSk7CgkJCX0KCQl9Cgl9Cn0KaW50IG1haW4oKQp7CiAgICBpbnQgbjsKCWNpbiA+PiBuOwoJaW50IGFbbl07CiAgICBmb3IgKGludCBpPTA7aTxuO2krKyl7CiAgICAgICAgY2luPj5hW2ldOwogICAgfQoJcGFydGl0aW9uKGEsIG4sIDMpOwoJaWYgKHFxICE9IDEpIHsKCQljb3V0IDw8IGFyci5zaXplKCkgPDwgIiAiIDw8IGFycjEuc2l6ZSgpIDw8ICIgIiA8PCBhcnIyLnNpemUoKSA8PCBlbmRsOwoJCWZvciAoaW50IGkgPSAwOyBpIDw9IGFyci5zaXplKCktMTsgaSsrKSB7CgkJCWNvdXQgPDwgYXJyW2ldIDw8ICIgIjsKCQl9CgkJY291dCA8PCBlbmRsOwoJCWZvciAoaW50IGkgPSAwOyBpIDw9IGFycjEuc2l6ZSgpLTE7IGkrKykgewoJCQljb3V0IDw8IGFycjFbaV0gPDwgIiAiOwoJCX0KCQljb3V0IDw8IGVuZGw7CgkJZm9yIChpbnQgaSA9IDA7IGkgPD0gYXJyMi5zaXplKCktMTsgaSsrKSB7CgkJCWNvdXQgPDwgYXJyMltpXSA8PCAiICI7CgkJfQoJfQoJcmV0dXJuIDA7Cn0KCg==