Problem p03425 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
using namespace std;

/*
,,,,
　　　　　　　　　　　　　　　　　　　　　　　　　　,.斗*''“i:i:{
　　　　　　　　　　　　　,.　｡. . . * : : : ''' : : : :” :”“ ''ｰ - 弋,,_
　　　　　 　 　 ,.斗*''“ : : : : : : : : : : : : : ' ' ' ' ' ' : : : : : : : :
: : :”: '':* ｡ , 　　　 ,.斗*''“ ” ＼：　　 ”・・． ' ' ' '　　　　　　　　 ' '
' ' : : : : : : : : : : : : ”ミ*｡,,,,,,　　　　　　 　 　 　 ＿ 　　く.　 ◎　
ﾞ:.ﾞ:..　ﾟ:,　:　───────────　　　--　　,,,,,,__ ' ' '
:.:.:.:.:.”≧s｡.　　＿,,,｡s*i:i:i:i:< 　　ﾏ*s｡ :,　 }　ﾟ:,　
:}　　　　　　　　　　　　　　　　　　　　　　　　　　　　”　''　-　”””：：”：：`*｡i:i:i:i:i:i:i;:’
　　　` .｡`　 ,　,ノ ／｡
,,,_　　　　　　　　　　　　　　　　　　　　　　　　　　　　　＿＿`　　}
}　　ﾉi:i:i:i:i:ﾂ 　　　　　
`　*　｡　　`*｡i:i:i::*=-　　　　　　　　　　　＿＿　　　　　　,,,....｡s*'i,:’　　　”`*｡＿,*’i:i:i:i:r’
　　　　　　　　　　　”　─ --　　　　｡｡｡｡｡　　 -　－`''''''''ヽ ─
'''”　　　｀ｰ“　　　　　　　`*｡i:i:i:i:i:i:
　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　`*｡i:i:::
　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　`*ﾟ:,
         fozubaoyou    no BUGs alive!
*/

typedef long long ll;
//{
#define mp make_pair
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define dumo dump
//}

#define debug_interval ','
#define dump_interval endl
#define debug_toggle 0

//{
inline int toInt(string s) {
  int v;
  istringstream sin(s);
  sin >> v;
  return v;
}
template <class T> inline string toString(T x) {
  ostringstream sout;
  sout << x;
  return sout.str();
}
template <class... A> inline void dump() { cout << endl; }
template <class... A> inline void dump_rest() { cout << endl; }
template <class T, class... A>
inline void dump_rest(const T &first, const A &...rest) {
  cout << dump_interval << first;
  dump_rest(rest...);
}
template <class T, class... A>
inline void dump(const T &first, const A &...rest) {
  cout << first;
  dump_rest(rest...);
}
template <class... A> inline void debug() { cout << endl; }
template <class... A> inline void debug_rest() { cout << endl; }
template <class T, class... A>
inline void debug_rest(const T &first, const A &...rest) {
  cout << debug_interval << first;
  debug_rest(rest...);
}
template <class T, class... A>
inline void debug(const T &first, const A &...rest) {
  if (debug_toggle)
    cout << first, debug_rest(rest...);
}
//}

int n;
ll ans;
array<vector<string>, 4> h;

int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    if (s[0] == 'M') {
      h[0].push_back(s);
    } else if (s[0] == 'A') {
      h[1].push_back(s);
    } else if (s[0] == 'R') {
      h[2].push_back(s);
    } else if (s[0] == 'C') {
      h[3].push_back(s);
    } else if (s[0] == 'H') {
      h[4].push_back(s);
    }
  }
  for (int i = 0; i < 3; i++) {
    for (int j = 1 + i; j < 4; j++) {
      for (int k = 1 + j; k < 5; k++) {
        ans += h[i].size() * h[j].size() * h[k].size();
      }
    }
  }
  cout << ans << endl;
}


Fixed submission:
#include <bits/stdc++.h>
using namespace std;

/*
,,,,
　　　　　　　　　　　　　　　　　　　　　　　　　　,.斗*''“i:i:{
　　　　　　　　　　　　　,.　｡. . . * : : : ''' : : : :” :”“ ''ｰ - 弋,,_
　　　　　 　 　 ,.斗*''“ : : : : : : : : : : : : : ' ' ' ' ' ' : : : : : : : :
: : :”: '':* ｡ , 　　　 ,.斗*''“ ” ＼：　　 ”・・． ' ' ' '　　　　　　　　 ' '
' ' : : : : : : : : : : : : ”ミ*｡,,,,,,　　　　　　 　 　 　 ＿ 　　く.　 ◎　
ﾞ:.ﾞ:..　ﾟ:,　:　───────────　　　--　　,,,,,,__ ' ' '
:.:.:.:.:.”≧s｡.　　＿,,,｡s*i:i:i:i:< 　　ﾏ*s｡ :,　 }　ﾟ:,　
:}　　　　　　　　　　　　　　　　　　　　　　　　　　　　”　''　-　”””：：”：：`*｡i:i:i:i:i:i:i;:’
　　　` .｡`　 ,　,ノ ／｡
,,,_　　　　　　　　　　　　　　　　　　　　　　　　　　　　　＿＿`　　}
}　　ﾉi:i:i:i:i:ﾂ 　　　　　
`　*　｡　　`*｡i:i:i::*=-　　　　　　　　　　　＿＿　　　　　　,,,....｡s*'i,:’　　　”`*｡＿,*’i:i:i:i:r’
　　　　　　　　　　　”　─ --　　　　｡｡｡｡｡　　 -　－`''''''''ヽ ─
'''”　　　｀ｰ“　　　　　　　`*｡i:i:i:i:i:i:
　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　`*｡i:i:::
　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　`*ﾟ:,
         fozubaoyou    no BUGs alive!
*/

typedef long long ll;
//{
#define mp make_pair
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define dumo dump
//}

#define debug_interval ','
#define dump_interval endl
#define debug_toggle 0

//{
inline int toInt(string s) {
  int v;
  istringstream sin(s);
  sin >> v;
  return v;
}
template <class T> inline string toString(T x) {
  ostringstream sout;
  sout << x;
  return sout.str();
}
template <class... A> inline void dump() { cout << endl; }
template <class... A> inline void dump_rest() { cout << endl; }
template <class T, class... A>
inline void dump_rest(const T &first, const A &...rest) {
  cout << dump_interval << first;
  dump_rest(rest...);
}
template <class T, class... A>
inline void dump(const T &first, const A &...rest) {
  cout << first;
  dump_rest(rest...);
}
template <class... A> inline void debug() { cout << endl; }
template <class... A> inline void debug_rest() { cout << endl; }
template <class T, class... A>
inline void debug_rest(const T &first, const A &...rest) {
  cout << debug_interval << first;
  debug_rest(rest...);
}
template <class T, class... A>
inline void debug(const T &first, const A &...rest) {
  if (debug_toggle)
    cout << first, debug_rest(rest...);
}
//}

int n;
ll ans;
array<vector<string>, 5> h;

int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    if (s[0] == 'M') {
      h[0].push_back(s);
    } else if (s[0] == 'A') {
      h[1].push_back(s);
    } else if (s[0] == 'R') {
      h[2].push_back(s);
    } else if (s[0] == 'C') {
      h[3].push_back(s);
    } else if (s[0] == 'H') {
      h[4].push_back(s);
    }
  }
  for (int i = 0; i < 3; i++) {
    for (int j = 1 + i; j < 4; j++) {
      for (int k = 1 + j; k < 5; k++) {
        ans += h[i].size() * h[j].size() * h[k].size();
      }
    }
  }
  cout << ans << endl;
}