#include <bits/stdc++.h>
using namespace std;
char mat[6][40];
int t[6], n, v[6];
int solve() {
  if (t[v[4]] != t[v[1]] + t[v[3]] - 1) return 0;
  if (t[v[5]] != t[v[0]] + t[v[2]] - 1) return 0;
  if (mat[v[0]][0] != mat[v[1]][0]) return 0;
  if (mat[v[0]][t[v[0]] - 1] != mat[v[4]][0]) return 0;
  if (mat[v[1]][t[v[1]] - 1] != mat[v[5]][0]) return 0;
  if (mat[v[5]][t[v[5]] - 1] != mat[v[3]][0]) return 0;
  if (mat[v[3]][t[v[3]] - 1] != mat[v[2]][t[v[2]] - 1]) return 0;
  if (mat[v[4]][t[v[4]] - 1] != mat[v[2]][0]) return 0;
  if (mat[v[5]][t[v[0]] - 1] != mat[v[4]][t[v[1]] - 1]) return 0;
  return 1;
}
int main() {
  n = 6;
  vector<string> ans, aux;
  for (int i = 0; i < n; i++) {
    scanf(" %s", mat[i]);
    t[i] = strlen(mat[i]);
  }
  for (int i = 0; i < n; i++) v[i] = i;
  do {
    int k = solve();
    if (!k) continue;
    aux.resize(t[v[4]]);
    for (int i = 0; i < t[v[4]]; i++) {
      aux[i].resize(t[v[5]]);
      for (int j = 0; j < t[v[5]]; j++) aux[i][j] = '.';
    }
    for (int i = 0; i < t[v[0]]; i++) aux[0][i] = mat[v[0]][i];
    for (int i = 0; i < t[v[1]]; i++) aux[i][0] = mat[v[1]][i];
    for (int i = 0; i < t[v[2]]; i++)
      aux[aux.size() - 1][i + t[v[0]] - 1] = mat[v[2]][i];
    for (int i = 0; i < t[v[3]]; i++)
      aux[t[v[1]] - 1 + i][t[v[5]] - 1] = mat[v[3]][i];
    for (int i = 0; i < t[v[4]]; i++) aux[i][t[v[0]] - 1] = mat[v[4]][i];
    for (int i = 0; i < t[v[5]]; i++) aux[t[v[1]] - 1][i] = mat[v[5]][i];
    if (ans.size() == 0 || aux < ans) ans = aux;
  } while (next_permutation(v, v + n));
  if (ans.size() == 0)
    printf("Impossible\n");
  else {
    for (int i = 0; i < ans.size(); i++) printf("%s\n", ans[i].c_str());
  }
  return 0;
}
