#include <bits/stdc++.h>
using namespace std;
const int Maxn = 1250005;
bitset<Maxn> f[52][26];
int num[55];
vector<int> ans1, ans2;
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &num[i]);
  for (int i = 1; i <= n; i++) scanf("%d", &num[n + i]);
  sort(num + 1, num + 2 * n + 1);
  f[2 * n + 1][0].flip(0);
  int s = 0;
  for (int i = 2 * n; i > 2; i--) {
    s += num[i];
    for (int j = 0; j <= min(2 * n - i + 1, n - 1); j++) {
      f[i][j] |= f[i + 1][j];
      if (j) f[i][j] |= (f[i + 1][j - 1] << num[i]);
    }
  }
  int id = -1;
  for (int i = 0; i <= Maxn; i++)
    if (f[3][n - 1][i] && abs(s - 2 * i) < abs(s - 2 * id)) id = i;
  ans1.push_back(num[1]);
  ans2.push_back(num[2]);
  int cnt = n - 1;
  for (int i = 3; i <= 2 * n; i++)
    if (cnt && f[i + 1][cnt - 1][id - num[i]]) {
      ans1.push_back(num[i]);
      cnt--;
      id -= num[i];
    } else
      ans2.push_back(num[i]);
  reverse(ans2.begin(), ans2.end());
  for (int i = 0; i < ans1.size(); i++) printf("%d ", ans1[i]);
  printf("\n");
  for (int i = 0; i < ans2.size(); i++) printf("%d ", ans2[i]);
  printf("\n");
  return 0;
}
