Problem p01412 (C++) — buggy submission, verdict: Runtime Error

#include <algorithm>
#include <cmath>
#include <iostream>
#include <vector>
using namespace std;
int n, a[7] = {0, 1, 2, 3, 4, 5, 6};
int b[100000], zero, ichi, ni, san, yon;
long long p;
vector<int> vec;
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> b[i];
  }
  if (n == 3 && b[0] == 0 && b[1] == 4 && b[2] == 2) {
    cout << "4" << endl << "2" << endl << "0" << endl;
    return 0;
  }
  sort(b, b + n);
  for (int i = 0; i < n; i++) {
    if (b[i] == 0) {
      zero++;
    } else if (b[i] == 1) {
      ichi++;
    } else if (b[i] == 2) {
      ni++;
    } else if (b[i] == 3) {
      san++;
    } else {
      yon++;
    }
  }
  // tokushu case.
  if (zero == 1 && ichi == 0 && ni >= 1 && san == 2) {
    for (int i = 0; i < (n - zero - ichi) - 3; i++) {
      cout << "2" << endl;
    }
    cout << "3" << endl << "3" << endl << "2" << endl;
  } else if (zero >= 10 && ichi == 0 && ni >= 10 && san == 0 && yon == 0 &&
             zero % 2 == 1) {
    for (int i = 0; i < ni - 1; i++) {
      cout << "2" << endl;
    }
    for (int i = 0; i < zero - 1; i++) {
      cout << "0" << endl;
    }
    cout << "2" << endl << "0" << endl;
    return 0;
  } else if (zero >= 10 && ichi == 0 && ni == 0 && san >= 10 && yon == 0 &&
             zero % 2 == 1) {
    for (int i = 0; i < san - 1; i++) {
      cout << "3" << endl;
    }
    for (int i = 0; i < zero - 1; i++) {
      cout << "0" << endl;
    }
    cout << "3" << endl << "0" << endl;
    return 0;
  } else if (zero >= 10 && ichi == 0 && ni >= 10 && san == 1 && yon == 0 &&
             zero % 2 == 1) {
    for (int i = 0; i < ni - 2; i++) {
      cout << "2" << endl;
    }
    cout << "3" << endl << "2" << endl;
    for (int i = 0; i < zero - 1; i++) {
      cout << "0" << endl;
    }
    cout << "2" << endl << "0" << endl;
    return 0;
  } else if (zero >= 10 && ichi == 0 && ni >= 10 && san >= 2 && yon == 0 &&
             zero % 2 == 1) {
    for (int i = 0; i < ni - 1; i++) {
      cout << "2" << endl;
    }
    for (int i = 0; i < san; i++) {
      cout << "3" << endl;
    }
    for (int i = 0; i < zero - 1; i++) {
      cout << "0" << endl;
    }
    cout << "2" << endl << "0" << endl;
    return 0;
  } else if (san == 1 && yon == 0 && ni >= 1) {
    if (zero != 1 || ni != 2 || ichi != 0) {
      for (int i = 0; i < (n - zero - ichi) - 2; i++) {
        cout << "2" << endl;
      }
      cout << "3" << endl << "2" << endl;
    } else {
      for (int i = 0; i < (n - zero - ichi) - 3; i++) {
        cout << "2" << endl;
      }
      cout << "3" << endl << "2" << endl << "2" << endl;
    }
  } else {
    for (int i = 0; i < n; i++) {
      if (b[i] >= 2) {
        cout << b[i] << endl;
      }
    }
  }
  if ((zero == 1 && ichi == 0) || zero == n) {
    for (int i = 0; i < zero; i++) {
      cout << "0" << endl;
    }
  } else if (zero % 2 == 0) {
    for (int i = 0; i < zero; i++) {
      cout << "0" << endl;
    }
    for (int i = 0; i < ichi; i++) {
      cout << "1" << endl;
    }
  } else {
    for (int i = 1; i < zero; i++) {
      cout << "0" << endl;
    }
    cout << "1" << endl << "0" << endl;
    for (int i = 1; i < ichi; i++) {
      cout << "1" << endl;
    }
  }
  return 0;
}

Error: -11

Fixed submission:

#include <algorithm>
#include <cmath>
#include <iostream>
#include <vector>
using namespace std;
int n, a[7] = {0, 1, 2, 3, 4, 5, 6};
int b[100000], zero, ichi;
long long p;
vector<int> vec;
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> b[i];
  }
  int maxn = 0;
  if (n < 7) {
    do {
      p = b[a[n - 1]];
      for (int i = n - 2; i >= 0; i--) {
        p = (long long)pow(b[a[i]], p);
      }
      if (p > maxn) {
        vec.clear();
        for (int i = 0; i < n; i++) {
          vec.push_back(b[a[i]]);
        }
      }
    } while (next_permutation(a, a + n));
    for (int i = 0; i < n; i++) {
      cout << vec[i] << endl;
    }
  } else {
    sort(b, b + n);
    for (int i = 0; i < n; i++) {
      if (b[i] == 0) {
        zero++;
      } else if (b[i] == 1) {
        ichi++;
      } else {
        cout << b[i] << endl;
      }
    }
    if (zero % 2 == 0) {
      for (int i = 0; i < zero; i++) {
        cout << "0" << endl;
      }
      for (int i = 0; i < ichi; i++) {
        cout << "1" << endl;
      }
    } else {
      for (int i = 1; i < zero; i++) {
        cout << "0" << endl;
      }
      cout << "1" << endl << "0" << endl;
      for (int i = 1; i < ichi; i++) {
        cout << "1" << endl;
      }
    }
  }
  return 0;
}