#include <bits/stdc++.h>
using namespace std;
const int MAXN = 51;
const int MAXM = 1250005;
int n, tot, ans = 1e9, A, B, X, Y;
int a[MAXN];
int up[MAXN];
int dn[MAXN];
long long f[25][MAXM];
void add(int v) {
  for (int i = n - 1; i >= 1; i--) {
    int c = max(0, (tot >> 1) - v + 1);
    long long *A = f[i] + v, *B = f[i - 1];
    while (c--) *(A++) += *(B++);
  }
}
void ers(int v) {
  for (int i = 1; i < n; i++) {
    int c = max(0, (tot >> 1) - v + 1);
    long long *A = f[i] + v, *B = f[i - 1];
    while (c--) *(A++) -= *(B++);
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= 2 * n; i++) {
    scanf("%d", &a[i]);
    tot += a[i];
  }
  sort(a + 1, a + 2 * n + 1);
  tot -= a[1];
  f[0][0] = 1;
  for (int i = 2; i <= 2 * n; i++) add(a[i]);
  for (int i = 2; i <= 2 * n; i++) {
    if ((tot >> 1) < max(0, a[1] + a[i] + tot - ans + 1)) continue;
    ers(a[i]);
    tot -= a[i];
    for (int j = (tot >> 1); j >= max(0, a[1] + a[i] + tot - ans + 1); j--)
      if (f[n - 1][j]) {
        if (a[1] + a[i] + tot - j < ans) {
          ans = a[1] + a[i] + tot - j;
          X = i;
          Y = j;
        }
        break;
      }
    tot += a[i];
    add(a[i]);
  }
  ers(a[X]);
  int cnt = n - 1;
  for (int i = 2; i <= 2 * n; i++)
    if (i != X) {
      ers(a[i]);
      if (f[cnt][Y])
        dn[++B] = a[i];
      else {
        up[++A] = a[i];
        Y -= a[i];
        cnt--;
      }
    }
  printf("%d ", a[1]);
  for (int i = 1; i <= A; i++) printf("%d ", up[i]);
  printf("\n");
  for (int i = B; i >= 1; i--) printf("%d ", dn[i]);
  printf("%d\n", a[X]);
  return 0;
}
