#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int w = 0, x = 0;
  char c = getchar();
  while (!isdigit(c)) w |= c == '-', c = getchar();
  while (isdigit(c)) x = (x << 3) + (x << 1) + (c ^ 48), c = getchar();
  return w ? -x : x;
}
namespace star {
const int maxn = 30, maxm = 1e6 + 10;
int n, a[maxn << 1], mx, sum, a1, a2;
int in[maxm];
bool f[maxn][maxm];
int ans[maxn][2], pre[maxn][maxm];
inline void work() {
  n = read();
  for (int i = 1; i <= n << 1; i++) sum += a[i] = read(), mx = max(mx, a[i]);
  sort(a + 1, a + 1 + (n << 1));
  sum = sum - a[1] - a[2] >> 1;
  ans[1][0] = a[1], ans[n][1] = a[2];
  f[0][0] = 1;
  for (int i = 3; i <= n << 1; i++) in[a[i]]++;
  for (int i = 3; i <= n << 1; i++)
    for (int j = min(i, n - 1); j; j--) {
      for (int k = sum; k >= a[i]; k--) {
        if (f[j][k]) continue;
        if (f[j - 1][k - a[i]]) pre[j][k] = a[i], f[j][k] = 1;
      }
    }
  n--;
  for (int x = sum; ~x; x--)
    if (f[n][x]) {
      int tp = n;
      for (int i = 1; i <= n; i++)
        ans[i][1] = pre[tp][x], --in[pre[tp][x]], x -= pre[tp][x], tp--;
      int cnt = 1;
      for (int i = 0; i <= mx; i++)
        while (in[i]) ans[++cnt][0] = i, in[i]--;
      for (int i = 1; i <= n + 1; i++) printf("%d ", ans[i][0]);
      puts("");
      for (int i = 1; i <= n + 1; i++) printf("%d ", ans[i][1]);
      puts("");
      return;
    }
}
}  // namespace star
signed main() {
  star::work();
  return 0;
}
