#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC target("sse4")
using namespace std;
const long long INF = 1e18;
const long long MOD = 1e9 + 7;
const long long MX = 2e6 + 10;
const long long dx[8] = {1, 0, -1, 0, 1, 1, -1, -1},
                dy[8] = {0, 1, 0, -1, -1, 1, -1, 1};
bool TC = 0;
void test_case() {
  long long n;
  cin >> n;
  long long v[n];
  for (long long i = 0; i < n; i++) cin >> v[i];
  vector<long long> a, b, c;
  for (long long i = 0; i < n; i++) {
    if (v[i] < 0)
      a.push_back(v[i]);
    else if (v[i] > 0)
      b.push_back(v[i]);
    else
      c.push_back(v[i]);
  }
  if ((long long)((a).size()) == 2) {
    c.push_back(a[1]);
  } else if ((long long)((a).size()) > 2) {
    b.push_back(a[1]);
    b.push_back(a[2]);
    for (long long i = 3; i < (long long)((a).size()); i++) {
      c.push_back(a[i]);
    }
  }
  cout << 1 << " " << a[0] << '\n';
  cout << (long long)((b).size()) << " ";
  for (long long i = 0; i < (long long)((b).size()); i++) cout << b[i] << " ";
  cout << '\n';
  cout << (long long)((c).size()) << " ";
  for (long long i = 0; i < (long long)((c).size()); i++) cout << c[i] << " ";
}
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  if (TC) {
    long long T;
    cin >> T;
    while (T--) test_case();
  } else
    test_case();
  return 0;
}
