#include <bits/stdc++.h>
using namespace std;
struct ss {
  char str1[20];
};
ss name[100000];
;
char d;
int n;
vector<int> v[205];
int vis[100000];
int True;
bool cmp(const ss &a, const ss &b) {
  int x = strcmp(a.str1, b.str1);
  if (x <= 0) return true;
  return false;
}
int main() {
  int i, j;
  int tot;
  while (scanf("%d", &n) == 1) {
    True++;
    for (i = 0; i < n; i++) scanf("%s", name[i].str1);
    for (i = 0; i <= 200; i++) {
      v[i].clear();
      v[i].push_back(1);
    }
    scanf("%s", name[n].str1);
    tot = 0;
    d = name[n].str1[0];
    for (i = 0; i < n; i++) {
      int len = strlen(name[i].str1);
      name[i].str1[len] = d;
      name[i].str1[len + 1] = 0;
    }
    sort(name, name + n, cmp);
    for (i = 0; i < n; i++) {
      int len = strlen(name[i].str1);
      v[len].push_back(i);
      tot += len;
    }
    tot = tot * 2;
    tot /= n;
    for (i = 0; i < n; i++) {
      if (vis[i] == True) continue;
      int len = strlen(name[i].str1);
      if (tot - len >= 0) {
        vis[i] = True;
        printf("%s", name[i].str1);
        v[len][0]++;
        j = v[tot - len][v[tot - len][0]];
        v[tot - len][0]++;
        vis[j] = True;
        for (int ll = 0; name[j].str1[ll] != d && name[j].str1[ll] != 0; ll++)
          printf("%c", name[j].str1[ll]);
        printf("\n");
      }
    }
  }
  return 0;
}
