Uploaded by ADVEY NANDAN

message 3

advertisement
#include <bits/stdc++.h>
using namespace std;
template <class K, class V>
ostream &operator<<(ostream &out, const pair<K, V> &obj) {
return out << "(" << obj.first << ", " << obj.second << ")";
}
template <class T, class = decay_t<decltype(*begin(declval<T>()))>,
class = enable_if_t<!is_same<T, string>::value>>
ostream &operator<<(ostream &out, const T &obj) {
out << "[";
for (auto it = obj.begin(); it != obj.end(); it++) {
out << &", "[2 * (it == obj.begin())] << *it;
}
return out << "]";
}
using ll = long long;
template <class T>
using vec = vector<T>;
#define FOR(i, s, e) for (ll i = (ll)(s); i < (ll)(e); i++)
#define CFOR(i, s, e) for (ll i = (ll)(s); i <= (ll)(e); i++)
#define TRAV(e, i) for (const auto &e : i)
#define dbg(x) cerr << "ln" << __LINE__ << ": " << #x << " = " << x << "\n";
int main() {
ll n, m, r, c;
cin >> n >> m >> r >> c;
vec<string> grid(n, string(m, ' '));
string garbage = "bcd";
if (r == n) {
FOR(i, 0, n - 1) {
FOR(j, 0, m) {
grid[i][j] = 'a';
}
}
FOR(i, 0, m) {
grid[n - 1][i] = 'b';
}
ll curr = c;
FOR(j, 0, m) {
if (j >= m - j - 1) break;
if (curr >= 2) {
grid[n - 1][j] = 'a';
grid[n - 1][m - j - 1] = 'a';
curr -= 2;
}
}
if (curr) {
grid[n - 1][m / 2] = 'a';
}
} else if (c == m) {
FOR(i, 0, n) {
FOR(j, 0, m - 1) {
grid[i][j] = 'a';
}
}
FOR(i, 0, n) {
grid[i][m - 1] = 'b';
}
ll curr = r;
FOR(i, 0, n) {
if (i >= n - i - 1) break;
if (curr >= 2) {
grid[i][m - 1] = 'a';
grid[n - i - 1][m - 1] = 'a';
curr -= 2;
}
}
if (curr) {
grid[n / 2][m - 1] = 'a';
}
} else {
FOR(i, 0, n) {
FOR(j, 0, m) {
grid[i][j] = garbage[(i + j) % 3];
}
}
FOR(i, 0, r) {
FOR(j, 0, m) {
grid[i][j] = 'a';
}
}
FOR(i, 0, n) {
FOR(j, 0, c) {
grid[i][j] = 'a';
}
}
}
ll nr = 0, nc = 0;
FOR(i, 0, n) {
bool p = true;
FOR(j, 0, m) {
if (grid[i][j] != grid[i][m - j - 1]) p = false;
}
if (p) nr++;
}
FOR(j, 0, m) {
bool p = true;
FOR(i, 0, n) {
if (grid[i][j] != grid[n - i - 1][j]) p = false;
}
if (p) nc++;
}
if (nr != r || nc != c) {
cout << "IMPOSSIBLE\n";
return 0;
}
FOR(i, 0, n) {
cout << grid[i] << "\n";
}
}
Download