#include <bits/stdc++.h>
using namespace std;
string s[10];
string ans[10];
bool vis[10];
bool flag;
struct Node {
  char s[50][50];
} stk[100000];
int top;
bool check() {
  if (s[0].size() + s[2].size() != s[1].size() + 1) return false;
  if (s[3].size() + s[5].size() != s[4].size() + 1) return false;
  if (s[0][0] != s[3][0]) return false;
  if (s[0][s[0].size() - 1] != s[4][0]) return false;
  if (s[1][0] != s[3][s[3].size() - 1]) return false;
  if (s[1][s[0].size() - 1] != s[4][s[3].size() - 1]) return false;
  if (s[4][s[4].size() - 1] != s[2][0]) return false;
  if (s[2][s[2].size() - 1] != s[5][s[5].size() - 1]) return false;
  if (s[1][s[1].size() - 1] != s[5][0]) return false;
  int x = s[1].size();
  int y = s[4].size();
  for (int i = 0; i < s[0].size(); i++) stk[top].s[0][i] = s[0][i];
  for (int i = s[0].size(); i < x; i++) stk[top].s[0][i] = '.';
  for (int i = 1; i < s[3].size() - 1; i++) {
    stk[top].s[i][0] = s[3][i];
    for (int j = 1; j < s[0].size() - 1; j++) stk[top].s[i][j] = '.';
    stk[top].s[i][s[0].size() - 1] = s[4][i];
    for (int j = s[0].size(); j < x; j++) stk[top].s[i][j] = '.';
  }
  for (int i = 0; i < s[1].size(); i++)
    stk[top].s[s[3].size() - 1][i] = s[1][i];
  for (int i = s[3].size(); i < y - 1; i++) {
    for (int j = 0; j < s[0].size() - 1; j++) stk[top].s[i][j] = '.';
    stk[top].s[i][s[0].size() - 1] = s[4][i];
    for (int j = s[0].size(); j < x - 1; j++) stk[top].s[i][j] = '.';
    stk[top].s[i][x - 1] = s[5][i - s[3].size() + 1];
  }
  for (int i = 0; i < x - s[2].size(); i++) stk[top].s[y - 1][i] = '.';
  for (int i = x - s[2].size(); i < x; i++)
    stk[top].s[y - 1][i] = s[2][i - (x - s[2].size())];
  top++;
  return true;
}
void dfs(int id, int len) {
  if (id == len) {
    if (check()) flag = true;
    return;
  }
  for (int i = 0; i < len; i++) {
    if (vis[i]) continue;
    vis[i] = true;
    s[id] = ans[i];
    dfs(id + 1, len);
    vis[i] = false;
  }
}
bool cmp(Node x, Node y) {
  for (int i = 0; i < 30; i++) {
    if (strcmp(x.s[i], y.s[i]) == -1) return true;
    if (strcmp(x.s[i], y.s[i]) == 1) return false;
  }
  return false;
}
int main() {
  for (int i = 0; i < 6; i++) cin >> ans[i];
  sort(ans, ans + 6);
  dfs(0, 6);
  if (!flag)
    puts("Impossible");
  else {
    sort(stk, stk + top, cmp);
    for (int i = 0; i < 30; i++) {
      for (int j = 0; stk[0].s[i][j] != '\0'; j++) {
        if (stk[0].s[i][j] == '@')
          putchar('.');
        else
          putchar(stk[0].s[i][j]);
      }
      puts("");
    }
  }
  return 0;
}
