Problem p02825 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
using namespace std;
#define REP(i, a) for (int i = 0; i < (a); i++)
#define ALL(a) (a).begin(), (a).end()
typedef long long ll;
typedef pair<int, int> P;
const int INF = 1e9;
const long long LINF = 1e18;
const long long MOD = 1e9 + 7;

signed main() {
  int n;
  cin >> n;
  if (n < 3) {
    cout << -1 << endl;
    return 0;
  }
  if (n % 3 == 0) {
    vector<vector<char>> ans(n, vector<char>(n, '.'));
    REP(i, n) {
      REP(j, n) {
        if (i == j && i % 3 == 0 && j % 3 == 0) {
          ans[i][j] = 'a';
          ans[i][j + 1] = 'a';
          ans[i][j + 2] = 'b';
          ans[i + 1][j] = 'b';
          ans[i + 1][j + 2] = 'b';
          ans[i + 2][j] = 'b';
          ans[i + 2][j + 1] = 'a';
          ans[i + 2][j + 2] = 'a';
        }
      }
    }
  }
  vector<vector<char>> ans(n, vector<char>(n, '.'));
  if (n % 4 == 1) {
    char d5[5][5] = {
        'a', 'a', 'b', 'b', 'a', 'b', 'c', 'c', '.', 'a', 'b', 'a', 'a',
        'b', 'b', 'a', '.', '.', 'a', 'c', 'a', '.', '.', 'a', 'c',
    };
    REP(i, 5) {
      REP(j, 5) { ans[i][j] = d5[i][j]; }
    }
  } else if (n % 4 == 2) {
    char d6[6][6] = {
        'a', 'a', 'b', 'b', 'a', 'a', 'b', 'c', 'a', '.', '.', '.',
        'b', 'c', 'a', '.', '.', '.', '.', '.', '.', 'a', 'b', 'a',
        '.', '.', '.', 'a', 'b', 'a', 'a', 'a', 'b', 'b', 'c', 'c',
    };
    REP(i, 6) {
      REP(j, 6) { ans[i][j] = d6[i][j]; }
    }
  } else if (n % 4 == 3) {
    char d7[7][7] = {
        'a', 'a', 'b', 'b', 'a', 'a', '.', 'b', 'c', '.', '.', '.', '.',
        'a', 'b', 'c', '.', '.', '.', '.', 'a', 'a', 'b', '.', '.', '.',
        '.', 'b', 'a', 'b', '.', '.', '.', '.', 'b', '.', '.', 'a', 'a',
        'b', 'b', 'c', '.', '.', 'b', 'b', 'a', 'a', 'c',
    };
    REP(i, 7) {
      REP(j, 7) { ans[i][j] = d7[i][j]; }
    }
  }
  char d4[4][4] = {
      'a', 'a', 'c', 'a', 'b', 'b', 'c', 'a',
      'a', 'c', 'd', 'd', 'a', 'c', 'a', 'a',
  };
  int t = 4;
  t += n % 4;
  if (n % 4 == 0)
    t = 0;
  for (int i = t; i < n; i++) {
    for (int j = t; j < n; j++) {
      if (i - t == j - t && (i - t) % 4 == 0 && (j - t) % 4 == 0) {
        REP(k, 4) {
          REP(l, 4) { ans[i + k][j + l] = d4[k][l]; }
        }
      }
    }
  }
  REP(i, n) {
    REP(j, n) { cout << ans[i][j]; }
    cout << endl;
  }
  return 0;
}

Fixed submission:
#include <bits/stdc++.h>
using namespace std;
#define REP(i, a) for (int i = 0; i < (a); i++)
#define ALL(a) (a).begin(), (a).end()
typedef long long ll;
typedef pair<int, int> P;
const int INF = 1e9;
const long long LINF = 1e18;
const long long MOD = 1e9 + 7;

signed main() {
  int n;
  cin >> n;
  if (n < 3) {
    cout << -1 << endl;
    return 0;
  }
  if (n == 3) {
    cout << "aab" << endl;
    cout << "b.b" << endl;
    cout << "baa" << endl;
    return 0;
  }
  vector<vector<char>> ans(n, vector<char>(n, '.'));
  if (n % 4 == 1) {
    char d5[5][5] = {
        'a', 'a', 'b', 'b', 'a', 'b', 'c', 'c', '.', 'a', 'b', 'a', 'a',
        'b', 'b', 'a', '.', '.', 'a', 'c', 'a', '.', '.', 'a', 'c',
    };
    REP(i, 5) {
      REP(j, 5) { ans[i][j] = d5[i][j]; }
    }
  } else if (n % 4 == 2) {
    char d6[6][6] = {
        'a', 'a', 'b', 'b', 'a', 'a', 'b', 'c', 'a', '.', '.', '.',
        'b', 'c', 'a', '.', '.', '.', '.', '.', '.', 'a', 'b', 'a',
        '.', '.', '.', 'a', 'b', 'a', 'a', 'a', 'b', 'b', 'c', 'c',
    };
    REP(i, 6) {
      REP(j, 6) { ans[i][j] = d6[i][j]; }
    }
  } else if (n % 4 == 3) {
    char d7[7][7] = {
        'a', 'a', 'b', 'b', 'a', 'a', '.', 'b', 'c', '.', '.', '.', '.',
        'a', 'b', 'c', '.', '.', '.', '.', 'a', 'a', 'b', '.', '.', '.',
        '.', 'b', 'a', 'b', '.', '.', '.', '.', 'b', '.', '.', 'a', 'a',
        'b', 'b', 'c', '.', '.', 'b', 'b', 'a', 'a', 'c',
    };
    REP(i, 7) {
      REP(j, 7) { ans[i][j] = d7[i][j]; }
    }
  }
  char d4[4][4] = {
      'a', 'a', 'c', 'a', 'b', 'b', 'c', 'a',
      'a', 'c', 'd', 'd', 'a', 'c', 'a', 'a',
  };
  int t = 4;
  t += n % 4;
  if (n % 4 == 0)
    t = 0;
  for (int i = t; i < n; i++) {
    for (int j = t; j < n; j++) {
      if (i - t == j - t && (i - t) % 4 == 0 && (j - t) % 4 == 0) {
        REP(k, 4) {
          REP(l, 4) { ans[i + k][j + l] = d4[k][l]; }
        }
      }
    }
  }
  REP(i, n) {
    REP(j, n) { cout << ans[i][j]; }
    cout << endl;
  }
  return 0;
}