func_code_string: #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;   }   