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

#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (int)(n); ++i)
#define rep2(i, s, n) for (int i = (s); i < (int)(n); i++)
using namespace std;
int main() {
  int n, a, b, c;
  cin >> n >> a >> b >> c;
  bool ex = true;
  vector<char> d;
  vector<string> s(n);
  rep(i, n) { cin >> s.at(i); }
  rep(i, n - 1) {

    if (s.at(i) == "AB") {
      if (a > b) {
        a--;
        b++;
        d.push_back('B');
      } else if (a < b) {
        a++;
        b--;
        d.push_back('A');
      } else {
        if (s.at(i + 1) == "BC") {
          a--;
          b++;
          d.push_back('B');
        } else if (s.at(i + 1) == "AC") {
          a++;
          b--;
          d.push_back('A');
        } else {
          a++;
          b--;
          d.push_back('A');
        }
      }
    } else if (s.at(i) == "AC") {
      if (a > c) {
        a--;
        c++;
        d.push_back('C');
      } else if (a < c) {
        a++;
        c--;
        d.push_back('A');
      } else {
        if (s.at(i + 1) == "BC") {
          a--;
          c++;
          d.push_back('C');
        } else if (s.at(i + 1) == "AB") {
          a++;
          c--;
          d.push_back('A');
        } else {
          a++;
          c--;
          d.push_back('A');
        }
      }
    } else if (s.at(i) == "BC") {
      if (b > c) {
        b--;
        c++;
        d.push_back('C');
      } else if (b < c) {
        b++;
        c--;
        d.push_back('B');
      } else {
        if (s.at(i + 1) == "AB") {
          c--;
          b++;
          d.push_back('B');
        } else if (s.at(i + 1) == "AC") {
          c++;
          b--;
          d.push_back('C');
        } else {
          c++;
          b--;
          d.push_back('C');
        }
      }
    }
    if (a < 0 || b < 0 || c < 0) {
      ex = false;
      break;
    }
  }
  if (ex) {
    if (s.at(n - 1) == "AB") {
      if (a + b > 0) {
        if (a > b) {
          a--;
          b++;
          d.push_back('B');
        } else {
          a++;
          b--;
          d.push_back('A');
        }
      } else {
        ex = false;
      }
    } else if (s.at(n - 1) == "AC") {
      if (a + c > 0) {
        if (a > c) {
          d.push_back('C');
          c++;
          a--;
        } else {
          d.push_back('A');
          a++;
          c--;
        }
      } else {
        ex = false;
      }
    } else if (s.at(n - 1) == "BC") {
      if (b + c > 0) {
        if (b > c) {
          d.push_back('C');
          b--;
          c++;
        } else {
          d.push_back('B');
          b++;
          c--;
        }
      } else {
        ex = false;
      }
    }
  }
  if (ex) {
    cout << "Yes" << endl;
    rep(i, n) { cout << d.at(i) << endl; }
  } else {
    cout << "No" << endl;
  }
}

Error: 0

Fixed submission:

#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (int)(n); ++i)
#define rep2(i, s, n) for (int i = (s); i < (int)(n); i++)
using namespace std;
int main() {
  int n, a, b, c;
  cin >> n >> a >> b >> c;
  bool ex = true;
  vector<char> d;
  vector<string> s(n);
  rep(i, n) { cin >> s.at(i); }
  rep(i, n - 1) {

    if (s.at(i) == "AB") {
      if (a > b) {
        a--;
        b++;
        d.push_back('B');
      } else if (a < b) {
        a++;
        b--;
        d.push_back('A');
      } else {
        if (s.at(i + 1) == "BC") {
          a--;
          b++;
          d.push_back('B');
        } else if (s.at(i + 1) == "AC") {
          a++;
          b--;
          d.push_back('A');
        } else {
          a++;
          b--;
          d.push_back('A');
        }
      }
    } else if (s.at(i) == "AC") {
      if (a > c) {
        a--;
        c++;
        d.push_back('C');
      } else if (a > c) {
        a++;
        c--;
        d.push_back('A');
      } else {
        if (s.at(i + 1) == "BC") {
          a--;
          c++;
          d.push_back('C');
        } else if (s.at(i + 1) == "AB") {
          a++;
          c--;
          d.push_back('A');
        } else {
          a++;
          c--;
          d.push_back('A');
        }
      }
    } else if (s.at(i) == "BC") {
      if (b > c) {
        b--;
        c++;
        d.push_back('C');
      } else if (b > c) {
        b++;
        c--;
        d.push_back('B');
      } else {
        if (s.at(i + 1) == "AB") {
          c--;
          b++;
          d.push_back('B');
        } else if (s.at(i + 1) == "AC") {
          c++;
          b--;
          d.push_back('C');
        } else {
          c++;
          b--;
          d.push_back('C');
        }
      }
    }
    if (a < 0 || b < 0 || c < 0) {
      ex = false;
      break;
    }
  }

  if (s.at(n - 1) == "AB") {
    if (a + b > 0) {
      if (a > b) {
        a--;
        b++;
        d.push_back('B');
      } else {
        a++;
        b--;
        d.push_back('A');
      }
    }
  } else if (s.at(n - 1) == "AC") {
    if (a + c > 0) {
      if (a > c) {
        d.push_back('C');
        c++;
        a--;
      } else {
        d.push_back('A');
        a++;
        c--;
      }
    }
  } else if (s.at(n - 1) == "BC") {
    if (b + c > 0) {
      if (b > c) {
        d.push_back('C');
        b--;
        c++;
      } else {
        d.push_back('B');
        b++;
        c--;
      }
    }
  }
  if (a < 0 || b < 0 || c < 0) {
    ex = false;
  }
  if (ex) {
    cout << "Yes" << endl;
    rep(i, n) { cout << d.at(i) << endl; }
  } else {
    cout << "No" << endl;
  }
}