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