#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
const double EPS = 1e-6;
const int MOD = (int)1e9 + 7;
const int maxn = (int)2e5 + 5;
const int logn = 20;
int dr[] = {1, 1, 0, -1, -1, -1, 0, 1};
int dc[] = {0, 1, 1, 1, 0, -1, -1, -1};
int dx[] = {1, -1, 0, 0};
int dy[] = {0, 0, 1, -1};
int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
int lcm(int a, int b) { return a * (b / gcd(a, b)); }
inline bool check_bit(long long int n, int i) { return n & (1LL << i); }
inline long long int set_bit(long long int n, int i) { return n | (1LL << i); }
inline long long int reset_bit(long long int n, int i) {
  return n & (~(1LL << i));
}
inline bool is_squre_root(long long int x) {
  long long int s = sqrt(x);
  return (s * s == x);
}
inline bool is_power_of_two(long long int x) {
  return ((1LL << (long long int)log2(x)) == x);
}
inline bool is_leap_year(long long int year) {
  return (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  int n;
  cin >> n;
  vector<int> arr;
  for (int i = 0; i < (n); i++) {
    int x;
    cin >> x;
    if (x != 0) arr.push_back(x);
  }
  sort(arr.begin(), arr.end());
  int t;
  n--;
  cout << 1 << " " << arr[0] << '\n';
  if (arr[n - 1] > 0)
    cout << 1 << " " << arr[n - 1] << '\n', t = 1;
  else if (arr[n - 1] < 0)
    cout << 2 << " " << arr[n - 2] << " " << arr[n - 1] << '\n', t = 2;
  cout << n - t << " " << 0;
  for (int i = 1; i <= (n - t - 1); i++) cout << " " << arr[i];
  cout << '\n';
  return 0;
}
