#include <bits/stdc++.h>
using namespace std;
set<vector<string>> st;
int main() {
  vector<string> a;
  for (int i = 0; i < 6; i++) {
    string s;
    cin >> s;
    a.push_back(s);
  }
  sort(a.begin(), a.end());
  do {
    if (a[0].front() == a[1].front() && a[0].back() == a[2].front() &&
        a[1].back() == a[3].front() && a[3].back() == a[4].front() &&
        a[2].back() == a[5].front() && a[4].back() == a[5].back() &&
        a[0].size() + a[5].size() - 1 == a[3].size() &&
        a[1].size() + a[4].size() - 1 == a[2].size() &&
        a[2][a[1].size() - 1] == a[3][a[0].size() - 1]) {
      vector<string> ans = vector<string>(a[2].size());
      for (int i = 0; i < (int)a[2].size(); i++) {
        for (int j = 0; j < (int)a[3].size(); j++) ans[i].push_back('.');
      }
      for (int j = 0; j < (int)a[0].size(); j++) {
        ans[0][j] = a[0][j];
      }
      for (int i = 0; i < (int)a[1].size(); i++) {
        ans[i][0] = a[1][i];
      }
      for (int i = 0; i < (int)a[2].size(); i++) {
        ans[i][(int)a[0].size() - 1] = a[2][i];
      }
      for (int j = 0; j < (int)a[3].size(); j++) {
        ans[(int)a[1].size() - 1][j] = a[3][j];
      }
      for (int i = 0; i < (int)a[4].size(); i++) {
        ans[(int)a[1].size() - 1 + i][(int)a[3].size() - 1] = a[4][i];
      }
      for (int j = 0; j < (int)a[5].size(); j++) {
        ans[(int)a[2].size() - 1][a[0].size() - 1 + j] = a[5][j];
      }
      st.insert(ans);
    }
  } while (next_permutation(a.begin(), a.end()));
  if (st.empty())
    printf("Impossible\n");
  else {
    vector<string> ans = *st.begin();
    for (int i = 0; i < (int)ans.size(); i++) printf("%s\n", ans[i].c_str());
  }
  return 0;
}
