#include <bits/stdc++.h>
long long gi() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (!isdigit(ch)) f ^= ch == '-', ch = getchar();
  while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
  return f ? x : -x;
}
int a[61];
int f[26][2500010], ans[2][26];
bool yes[61];
int main() {
  int n = gi(), sum = 0;
  for (int j = 1; j <= n * 2; ++j) a[j] = gi(), sum += a[j];
  std::sort(a + 1, a + n * 2 + 1);
  sum -= a[1] + a[2];
  yes[1] = 1;
  f[0][0] = -1;
  for (int i = 3; i <= n * 2; ++i)
    for (int j = n - 1; j; --j)
      for (int k = sum; k >= a[i]; --k)
        if (!f[j][k] && f[j - 1][k - a[i]]) f[j][k] = i;
  sum = sum + 1 >> 1;
  while (!f[n - 1][sum]) ++sum;
  int x = n - 1, y = sum;
  while (x) yes[f[x][y]] = 1, y -= a[f[x][y]], --x;
  for (int i = 1; i <= n * 2; ++i)
    if (yes[i]) ans[0][++*ans[0]] = a[i];
  for (int i = 1; i <= n * 2; ++i)
    if (!yes[i]) ans[1][++*ans[1]] = a[i];
  std::sort(ans[0] + 1, ans[0] + n + 1);
  std::sort(ans[1] + 1, ans[1] + n + 1, std::greater<int>());
  for (int i = 0; i < 2; ++i) {
    for (int j = 1; j <= n; ++j) printf("%d ", ans[i][j]);
    puts("");
  }
  return 0;
}
