#include <bits/stdc++.h>
using namespace std;
void readint(int &first) {
  first = 0;
  int f = 1;
  char c;
  for (c = getchar(); !isdigit(c); c = getchar())
    if (c == '-') f = -1;
  for (; isdigit(c); c = getchar()) first = first * 10 + c - '0';
  first *= f;
}
void readint(long long &first) {
  first = 0;
  long long f = 1;
  char c;
  for (c = getchar(); !isdigit(c); c = getchar())
    if (c == '-') f = -1;
  for (; isdigit(c); c = getchar()) first = first * 10 + c - '0';
  first *= f;
}
inline void chkmin(int &first, int second) {
  first > second ? first = second : 0;
}
inline void chkmin(long long &first, long long second) {
  first > second ? first = second : 0;
}
inline void chkmax(int &first, int second) {
  first < second ? first = second : 0;
}
const int MAXN = 51;
int n, a[MAXN], sum = 0;
int f[MAXN][MAXN * 25000 + 1];
bool cho[MAXN];
int main() {
  readint(n);
  for (int i = (1); i <= (2 * n); ++i) readint(a[i]);
  sort(a + 1, a + 2 * n + 1);
  for (int i = (3); i <= (2 * n); ++i) sum += a[i];
  f[0][0] = -1;
  for (int i = (3); i <= (2 * n); ++i)
    for (int j = (min(i - 1, n - 1)); j >= (1); --j)
      for (int k = (a[i]); k <= (sum >> 1); ++k)
        if (f[j - 1][k - a[i]] && !f[j][k]) f[j][k] = i;
  int cur = n - 1, pos = 0;
  for (int k = (sum >> 1); k >= (0); --k)
    if (f[n - 1][k]) {
      pos = k;
      break;
    }
  while (cur) {
    int t = f[cur--][pos];
    cho[t] = 1;
    pos -= a[t];
  }
  printf("%d ", a[1]);
  for (int i = (3); i <= (2 * n); ++i)
    if (cho[i]) printf("%d ", a[i]);
  printf("\n");
  for (int i = (2 * n); i >= (3); --i)
    if (!cho[i]) printf("%d ", a[i]);
  printf("%d ", a[2]);
  return 0;
}
