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

#include <iostream>
#include <string>
#include <vector>

using namespace std;
bool isOK(string);
string isOK(string, char);

int main() {
  string str;
  bool ans;
  cin >> str;

  ans = isOK(str);
  if (ans)
    cout << "Yes\\n";
  else
    cout << "No\\n";
  return 0;
}

bool isOK(string str) {
  bool a = true, b = true, c = true;
  int count = 0;
  if (str == "ABC")
    return true;
  if (str.size() < 3)
    return false;
  for (int i = 0; i < str.size();) {
    if (str[i] == 'A') {
      i++;
      // a++;
      if (!(i < str.size()))
        break;
      if (str[i] == 'B') {
        i++;
        // b++;
        if (!(i < str.size()))
          break;
        if (str[i] == 'C') {
          count++;
          // c++;
          // i = i-2;
          // str.erase(str.begin() + i, str.begin() + i +3);
          // str.insert(str.begin() + i, mo);
          i++;
        } else {
          a = false;
          b = false; // b++;
        }
      } else {
        if (str[i] == 'A')
          a = false; // b++;
        if (str[i] == 'C') {
          a = false;
          c = false;
        } // b++;
      }
    } else {
      if (str[i] == 'B')
        b = false; // b++;
      if (str[i] == 'C')
        c = false; // c++;
      i++;
    }
  }
  if (count == 0)
    return false;
  if (a)
    return isOK(isOK(str, 'A'));
  if (b)
    return isOK(isOK(str, 'B'));
  if (c)
    return isOK(isOK(str, 'C'));
  return false;
}

string isOK(string str, char mo) {
  int count = 0;
  // if (str == "ABC") return true;
  // if(str.size() < 3) return false;
  for (int i = 0; i < str.size();) {
    if (str[i] == 'A') {
      i++;
      // a++;
      if (!(i < str.size()))
        break;
      if (str[i] == 'B') {
        i++;
        // b++;
        if (!(i < str.size()))
          break;
        if (str[i] == 'C') {
          count++;
          // c++;
          i = i - 2;
          str.erase(str.begin() + i, str.begin() + i + 3);
          str.insert(str.begin() + i, mo);
          i++;
        } else {
          // a=false; b=false;//b++;
        }
      } else {
        // if(str[i]=='A')a=false;//b++;
        // if(str[i]=='C'){a=false;c=false;}//b++;
      }
    } else {
      // if(str[i]=='B')b=false;//b++;
      // if(str[i]=='C')c=false;//c++;
      i++;
    }
  }
  return str;
  /*if(count ==0) {return false;}
  else{
      if(a) return isOK(str,'A');
      else if(b) return isOK(str,'B');
      else if(c) return isOK(str,'C');
      else return false;
  }*/
}


Error: 0

Fixed submission:

#include <iostream>
#include <string>

using namespace std;
bool isOK(string, char);

int main() {
  string str;
  bool ans;
  cin >> str;

  ans = isOK(str, 'A') || isOK(str, 'B') || isOK(str, 'C');
  if (ans)
    cout << "Yes\\n";
  else
    cout << "No\\n";
  return 0;
}

bool isOK(string str, char mo) {
  int count = 0;
  if (str == "ABC")
    return true;
  for (int i = 0; i < str.size() - 2;) {
    if (str[i] == 'A') {
      i++;
      if (str[i] == 'B') {
        i++;
        if (str[i] == 'C') {
          count++;
          i = i - 2;
          str.erase(str.begin() + i, str.begin() + i + 3);
          str.insert(str.begin() + i, mo);
          i++;
        }
      }
    } else {
      i++;
    }
  }
  if (count == 0) {
    return false;
  } else {
    return (isOK(str, 'A') || isOK(str, 'B') || isOK(str, 'C'));
  }
}