#include <bits/stdc++.h>   using namespace std;   const long long MOD = 1e9 + 7;   const double err = 1e-12;   const double PI = 3.141592653589793;   const int N = 1e5 + 5;   vector<string> V(6);   vector<bool> used(6, false);   vector<string> res(6);   vector<string> bres;   bool f = false;   void bt(int lvl) {     if (lvl == 0) {       for (int i = 0; i < 6; i++) {         for (int j = 0; j < 6; j++) {           if (i != j && V[i].front() == V[j].front()) {             res[0] = V[i];             res[1] = V[j];             used[i] = 1;             used[j] = 1;             bt(lvl + 1);             used[i] = 0;             used[j] = 0;           }         }       }     }     if (lvl == 1) {       for (int i = 0; i < 6; i++) {         if (!used[i] && V[i].front() == res[0].back()) {           res[2] = V[i];           used[i] = 1;           bt(lvl + 1);           used[i] = 0;         }       }     }     if (lvl == 2) {       for (int i = 0; i < 6; i++) {         if (!used[i] && V[i].front() == res[1].back() &&             V[i].length() >= res[0].length() &&             res[2].length() >= res[1].length() &&             V[i][res[0].length() - 1] == res[2][res[1].length() - 1]) {           res[3] = V[i];           used[i] = 1;           bt(lvl + 1);           used[i] = 0;         }       }     }     if (lvl == 3) {       for (int i = 0; i < 6; i++) {         if (!used[i] && V[i].front() == res[3].back() &&             V[i].length() == (res[2].length() - res[1].length() + 1)) {           res[4] = V[i];           used[i] = 1;           bt(lvl + 1);           used[i] = 0;         }       }     }     if (lvl == 4) {       for (int i = 0; i < 6; i++) {         if (!used[i] && V[i].front() == res[2].back() &&             V[i].back() == res[4].back()) {           if (V[i].length() == (res[3].length() - res[0].length() + 1)) {             res[5] = V[i];             used[i] = 1;             bt(lvl + 1);             used[i] = 0;           }         }       }     }     if (lvl == 5) {       vector<string> out(res[2].length(), string(res[3].length(),  . ));       for (int i = 0; i < res[0].length(); i++) out[0][i] = res[0][i];       for (int i = 0; i < res[1].length(); i++) out[i][0] = res[1][i];       for (int i = 0; i < res[2].length(); i++)         out[i][res[0].length() - 1] = res[2][i];       for (int i = 0; i < res[3].length(); i++)         out[res[1].length() - 1][i] = res[3][i];       for (int i = 0; i < res[4].length(); i++)         out[i + res[1].length() - 1][res[3].length() - 1] = res[4][i];       for (int i = 0; i < res[5].length(); i++)         out[res[2].length() - 1][i + res[0].length() - 1] = res[5][i];       if (bres.empty())         bres = out;       else {         bool f = false;         for (int i = 0; i < min(bres.size(), out.size()); i++) {           if (bres[i] > out[i]) {             f = true;             bres = out;             break;           } else if (out[i] > bres[i]) {             f = true;             break;           }         }         if (!f) {           if (bres.size() > out.size()) bres = out;         }       }     }   }   void solve() {     for (int i = 0; i < 6; i++) cin >> V[i];     bt(0);     if (bres.empty())       cout <<  Impossible n ;     else {       for (auto i : bres) cout << i <<   n ;     }   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     int t = 1;     while (t--) solve();     return 0;   }