#include <bits/stdc++.h>
using namespace std;
bool add(char &a, char b) {
  if (a != '.' && a != b) return false;
  a = b;
  return true;
}
int main() {
  string s[6];
  for (register int i = (0); i < (int)(6); ++i) cin >> s[i];
  sort(s, s + 6);
  vector<string> res;
  do {
    vector<string> V(((int)(s[0]).size()), string(((int)(s[1]).size()), '.'));
    if (((int)(s[0]).size()) != ((int)(s[4]).size()) + ((int)(s[3]).size()) - 1)
      continue;
    if (((int)(s[1]).size()) != ((int)(s[2]).size()) + ((int)(s[5]).size()) - 1)
      continue;
    bool ok = true;
    for (register int i = (0); i < (int)(((int)(s[0]).size())); ++i)
      ok &= add(V[i][((int)(s[2]).size()) - 1], s[0][i]);
    for (register int i = (0); i < (int)(((int)(s[1]).size())); ++i)
      ok &= add(V[((int)(s[3]).size()) - 1][i], s[1][i]);
    for (register int i = (0); i < (int)(((int)(s[2]).size())); ++i)
      ok &= add(V[0][i], s[2][i]);
    for (register int i = (0); i < (int)(((int)(s[3]).size())); ++i)
      ok &= add(V[i][0], s[3][i]);
    for (register int i = (0); i < (int)(((int)(s[4]).size())); ++i)
      ok &= add(V[((int)(s[3]).size()) - 1 + i][((int)(s[1]).size()) - 1],
                s[4][i]);
    for (register int i = (0); i < (int)(((int)(s[5]).size())); ++i)
      ok &= add(V[((int)(s[0]).size()) - 1][((int)(s[2]).size()) - 1 + i],
                s[5][i]);
    if (!ok) continue;
    if (res.empty() || V < res) res = V;
  } while (next_permutation(s, s + 6));
  if (res.empty())
    cout << "Impossible" << endl;
  else
    for (register int i = (0); i < (int)(((int)(res).size())); ++i)
      cout << res[i] << endl;
  return 0;
}
