Problem p02751 (C++)

Buggy submission (status: Runtime Error):
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iomanip>
#include <iostream>
#define re register
using namespace std;
int n, m;
int mp[2052][2052];
inline void work(re int x, re int y, re int X, re int Y) {
  if (x == X && y == Y) {
    mp[x][y] = 1;
    return;
  }
  mp[x + X >> 1][y + Y >> 1] = 1;
  int midx = x + X >> 1, midy = y + Y >> 1;
  work(x, y, midx - 1, midy - 1);
  work(midx + 1, y, X, midy - 1);
  work(x, midy + 1, midx - 1, Y);
  work(midx + 1, midy + 1, X, Y);
}
signed main() {
  int tmp = 0;
  scanf("%d%d", &n, &m);
  if (n < m) {
    for (re int i = 1; i <= (1 << m); i += (1 << n)) {
      work(1, i, (1 << n) - 1, i + (1 << n) - 2);
    }
  } else {
    for (re int i = 1; i <= (1 << n); i += (1 << m)) {
      work(i, 1, i + (1 << m) - 1, (1 << m) - 2);
    }
  }
  for (re int i = 1; i < (1 << n); ++i) {
    for (re int j = 1; j < (1 << m); ++j)
      printf("%d", mp[i][j]);
    putchar('\n');
  }
}

Fixed submission:
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iomanip>
#include <iostream>
#define re register
using namespace std;
int n, m;
int mp[2052][2052];
inline void work(re int x, re int y, re int X, re int Y) {
  if (x == X && y == Y) {
    mp[x][y] = 1;
    return;
  }
  mp[x + X >> 1][y + Y >> 1] = 1;
  int midx = x + X >> 1, midy = y + Y >> 1;
  work(x, y, midx - 1, midy - 1);
  work(midx + 1, y, X, midy - 1);
  work(x, midy + 1, midx - 1, Y);
  work(midx + 1, midy + 1, X, Y);
}
signed main() {
  int tmp = 0;
  scanf("%d%d", &n, &m);
  if (n < m) {
    for (re int i = 1; i <= (1 << m); i += (1 << n)) {
      work(1, i, (1 << n) - 1, i + (1 << n) - 2);
    }
  } else {
    for (re int i = 1; i <= (1 << n); i += (1 << m)) {
      work(i, 1, i + (1 << m) - 2, (1 << m) - 1);
    }
  }
  for (re int i = 1; i < (1 << n); ++i) {
    for (re int j = 1; j < (1 << m); ++j)
      printf("%d", mp[i][j]);
    putchar('\n');
  }
}