#include <bits/stdc++.h>
using namespace std;
template <typename T>
struct outputer;
struct outputable {};
template <typename T>
inline auto sqr(T x) -> decltype(x * x) {
  return x * x;
}
template <typename T1, typename T2>
inline bool umx(T1& a, T2 b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <typename T1, typename T2>
inline bool umn(T1& a, T2 b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
const int N = 25;
const int X = 50000;
struct Input {
  int n;
  int a[2 * N];
  bool read() {
    if (!(cin >> n)) {
      return 0;
    }
    for (int i = int(0); i < int(2 * n); ++i) {
      cin >> a[i];
    }
    return 1;
  }
  void init(const Input& input) { *this = input; }
};
struct Data : Input {
  int ans[2][N];
  void write() {
    for (int i = int(0); i < int(2); ++i) {
      for (int j = int(0); j < int(n); ++j) {
        if (j) {
          printf(" ");
        }
        printf("%d", ans[i][j]);
      }
      puts("");
    }
  }
};
namespace Main {
struct Solution : Data {
  uint32_t pr[N][(N - 1) * X + 1];
  void solve() {
    sort(a, a + 2 * n);
    reverse(a, a + 2 * n);
    memset(pr, -1, sizeof pr);
    pr[0][0] = 0;
    for (int i = int(0); i < int(2 * n - 2); ++i) {
      for (int j = int(min(i + 1, n - 1)) - 1; j >= int(0); --j) {
        for (int s = int(0); s < int(j * X + 1); ++s) {
          if (pr[j][s] != -1u && pr[j + 1][s + a[i]] == -1u) {
            pr[j + 1][s + a[i]] = i;
          }
        }
      }
    }
    int s = accumulate(a, a + 2 * n - 2, 0) / 2;
    while (pr[n - 1][s] == -1u) {
      --s;
    }
    vector<int> v;
    for (int i = int(n - 1) - 1; i >= int(0); --i) {
      int j = pr[i + 1][s];
      v.emplace_back(j);
      s -= a[j];
    }
    vector<int> w;
    for (int i = int(0); i < int(2 * n - 2); ++i) {
      if (!count((v).begin(), (v).end(), i)) {
        w.emplace_back(i);
      }
    }
    sort((v).begin(), (v).end());
    sort((w).begin(), (w).end());
    ans[0][0] = a[2 * n - 2];
    ans[1][n - 1] = a[2 * n - 1];
    for (int i = int(0); i < int(n - 1); ++i) {
      ans[0][i + 1] = a[v[n - 2 - i]];
      ans[1][n - 2 - i] = a[w[n - 2 - i]];
    }
  }
  void clear() {}
};
}  // namespace Main
Main::Solution sol;
int main() {
  cout.setf(ios::showpoint | ios::fixed);
  cout.precision(20);
  sol.read();
  sol.solve();
  sol.write();
  return 0;
}
