#include <bits/stdc++.h>
using namespace std;
vector<string> V(10, string(3, '.'));
string s[6];
int add(char &a, char b) {
  if (a != '.' && a != b) return 0;
  a = b;
  return 1;
}
int main() {
  char ss[50];
  int i;
  for (i = 0; i < 6; i++) {
    scanf("%s", ss);
    s[i] = ss;
  }
  sort(s, s + 6);
  vector<string> res;
  do {
    if (s[(1)].size() != s[(0)].size() + s[(2)].size() - 1) continue;
    if (s[(4)].size() != s[(3)].size() + s[(5)].size() - 1) continue;
    vector<string> v(s[(4)].size(), string(s[(1)].size(), '.'));
    int ok = 1;
    for (i = 0; i < s[(0)].size(); i++) ok &= add(v[0][i], s[0][i]);
    for (i = 0; i < s[(1)].size(); i++)
      ok &= add(v[s[(3)].size() - 1][i], s[1][i]);
    for (i = 0; i < s[(2)].size(); i++)
      ok &= add(v[s[(4)].size() - 1][s[(0)].size() - 1 + i], s[2][i]);
    for (i = 0; i < s[(3)].size(); i++) ok &= add(v[i][0], s[3][i]);
    for (i = 0; i < s[(4)].size(); i++)
      ok &= add(v[i][s[(0)].size() - 1], s[4][i]);
    for (i = 0; i < s[(5)].size(); i++)
      ok &= add(v[s[(3)].size() - 1 + i][s[(1)].size() - 1], s[5][i]);
    if (ok == 1 && (res.empty() || v < res)) res = v;
  } while (next_permutation(s, s + 6));
  if (res.empty()) {
    printf("Impossible\n");
  } else {
    for (int i = 0; i < res.size(); i++) printf("%s\n", res[i].data());
  }
}
