func_code_string: #include <bits/stdc++.h>   int n, m, i, j, k, l, a, b, c;   char s[200][200];   bool bo;   void fail() { bo = false; }   bool work(int x, int y, int o, int p, int a, int b, int c) {     int i, j;     if (x > o) {       return true;     }     if ((a < 0) || (b < 0) || (c < 0)) return false;     if (x == o) {       j = 0;       for (i = 1; i <= m; i += 2) {         s[1][i] = s[1][i + 1] =  a  + j;         j = (j ^ 1);       }       return true;     } else if (y == p) {       j = 0;       for (i = 1; i <= n; i += 2) {         s[i][1] = s[i + 1][1] =  a  + j;         j = (j ^ 1);       }       return true;     } else {       bool bo[29];       for (i = 0; i < 26; i++) {         bo[i] = false;       }       if (s[x - 1][y] != 0) {         bo[s[x - 1][y] -  a ] = true;       }       if (s[x - 1][y + 1] != 0) {         bo[s[x - 1][y + 1] -  a ] = true;       }       if (s[x][y - 1] != 0) {         bo[s[x][y - 1] -  a ] = true;       }       if (s[x + 1][y - 1] != 0) {         bo[s[x + 1][y - 1] -  a ] = true;       }       if (c >= 1) {         char ch;         for (i = 0; i < 26; i++)           if (!bo[i]) {             break;           }         ch =  a  + i;         s[x][y] = s[x][y + 1] = s[x + 1][y] = s[x + 1][y + 1] = ch;         c--;       } else if (a >= 2) {         char ch[2];         int k;         k = 0;         for (i = 0; i < 26; i++)           if (!bo[i]) {             ch[k] =  a  + i;             k++;             if (k == 2) {               break;             }           }         s[x][y] = s[x][y + 1] = ch[0];         s[x + 1][y] = s[x + 1][y + 1] = ch[1];         a -= 2;       } else if (b >= 2) {         char ch[2];         int k;         k = 0;         for (i = 0; i < 26; i++)           if (!bo[i]) {             ch[k] =  a  + i;             k++;             if (k == 2) {               break;             }           }         s[x][y] = s[x + 1][y] = ch[0];         s[x][y + 1] = s[x + 1][y + 1] = ch[1];         b -= 2;       } else {         return false;       }       y += 2;       if (y > m) {         x += 2;         y = 1;         if ((m & 1) == 1) {           y = 2;         }       }     }     return work(x, y, o, p, a, b, c);   }   void rect(int x, int y, int o, int p, int a, int b, int c) {     if (!work(x, y, o, p, a, b, c)) {       fail();     }   }   int main() {     bo = true;     scanf( %d%d%d%d%d , &n, &m, &a, &b, &c);     for (i = 0; i <= n; i++)       for (j = 0; j <= m; j++) {         s[i][j] = 0;       }     if ((((n * m) & 1) == 1) || (a * 2 + b * 2 + c * 4 < n * m)) {       fail();     } else if ((n & 1) == 1) {       rect(1, 1, 1, m, m / 2, 0, 0);       if (n > 1) {         rect(2, 1, n, m, a - m / 2, b, c);       } else {         if (a < m / 2) {           fail();         }       }     } else if ((m & 1) == 1) {       rect(1, 1, n, 1, 0, n / 2, 0);       if (m > 1) {         rect(1, 2, n, m, a, b - n / 2, c);       } else {         if (b < n / 2) {           fail();         }       }     } else {       rect(1, 1, n, m, a, b, c);     }     if (bo) {       for (i = 1; i <= n; i++) {         for (j = 1; j <= m; j++) {           printf( %c , s[i][j]);         }         printf(  n );       }     } else {       printf( IMPOSSIBLE n );     }     return 0;   }   