#include <bits/stdc++.h>
using namespace std;
bitset<50000 * 26> dp[50][26];
const int maxN = 60;
int arr[maxN];
int pairs[maxN];
int N;
int cal(int s) {
  int ans = -pairs[0];
  for (int i = 1; i < N; i++) {
    if (s & 1) {
      ans += pairs[i];
    } else {
      ans -= pairs[i];
    }
    s = s / 2;
  }
  return ans;
}
void f(int j, int i) {
  for (int k = 0; k < 120; k++)
    if (dp[j][i][k]) cout << k << " ";
  cout << endl;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> N;
  int ssum = 0;
  for (int i = 0; i < N * 2; i++) {
    cin >> arr[i];
  }
  sort(arr, arr + N * 2);
  for (int i = 0; i < 2 * N - 2; i++) {
    dp[i][0][arr[i + 2]] = 1;
    if (i > 0) dp[i][0] |= dp[i - 1][0];
    ssum += arr[i + 2];
  }
  for (int i = 1; i < N - 1; i++) {
    for (int j = i; j < 2 * N - 2; j++) {
      dp[j][i] = dp[j - 1][i] | (dp[j - 1][i - 1] << arr[j + 2]);
    }
  }
  int low = ssum / 2, high = (ssum + 1) / 2;
  int res = 0;
  while (1) {
    if (low >= 0 && dp[2 * N - 3][N - 2][low] == 1) {
      res = low;
      break;
    }
    if (dp[2 * N - 3][N - 2][high] == 1) {
      res = high;
      break;
    }
    low--, high++;
  }
  int row1[maxN];
  int row2[maxN];
  row1[0] = arr[0];
  row2[N - 1] = arr[1];
  int k1 = N - 1, k2 = 0;
  int pos = N - 2;
  for (int i = 2 * N - 4; i >= 0; i--) {
    if (pos == -1 or dp[i][pos][res]) {
      row1[k1--] = arr[i + 3];
    } else {
      row2[k2++] = arr[i + 3];
      res -= arr[i + 3];
      pos -= 1;
    }
  }
  if (k1 >= 1) {
    row1[k1--] = arr[2];
  } else {
    row2[k2++] = arr[2];
  }
  for (int i = 0; i < N; i++) cout << row1[i] << " ";
  cout << endl;
  for (int i = 0; i < N; i++) cout << row2[i] << " ";
  cout << endl;
  return 0;
}
