#include <bits/stdc++.h>
using namespace std;
void printd(const char* format) {}
template <typename T, typename... Targs>
void printd(const char* format, T value, Targs... Fargs) {}
void solve() {
  int n;
  cin >> n;
  int* a = new int[n];
  set<int> s;
  int nn = 0, np = 0, nz = 0;
  for (int i = 0; i < n; i++) {
    std::cin >> a[i];
    s.insert(a[i]);
    if (a[i] > 0)
      np++;
    else if (a[i] < 0)
      nn++;
    else
      nz++;
  }
  std::vector<int> pos;
  std::vector<int> neg;
  set<int>::iterator it;
  it = s.begin();
  int nnc = nn;
  int nnz = nz;
  if (np == 0) {
    pos.push_back(*it);
    pos.push_back(*(++it));
    it++;
    nnc -= 2;
    np += 2;
  }
  for (; it != s.end(); it++) {
    if (*it >= 0) break;
    neg.push_back(*it);
  }
  std::vector<int> zeros;
  if (nn % 2 == 0) {
    zeros.push_back(neg.at(neg.size() - 1));
    neg.pop_back();
    nnc--;
    nnz++;
  }
  it = s.begin();
  advance(it, nn + nz);
  for (; it != s.end(); it++) {
    pos.push_back(*it);
  }
  cout << nnc << ' ';
  for (int i = 0; i < neg.size(); i++) {
    std::cout << neg[i] << ' ';
  }
  std::cout << "" << '\n';
  std::cout << np << ' ';
  for (int i = 0; i < pos.size(); i++) {
    std::cout << pos[i] << ' ';
  }
  std::cout << "" << '\n';
  std::cout << nnz << ' ';
  for (int i = 0; i < zeros.size(); i++) {
    std::cout << zeros[i] << ' ';
  }
  for (int i = 0; i < nz; i++) {
    std::cout << "0" << ' ';
  }
  std::cout << "" << '\n';
}
int main(int argc, char const* argv[]) {
  int t;
  t = 1;
  for (int i = 1; i <= t; i++) {
    solve();
  }
}
