Language: C++

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
using namespace std;
#define int long long
#define rep(i, n) for (int i = 0; i < n; i++)
const int mo = 1e9 + 7;
struct mint
{
    int n;
    mint(int n = 0) : n(n) {}
};
mint operator+(mint a, mint b) { return (a.n += b.n) >= mo ? a.n - mo : a.n; }
mint operator-(mint a, mint b) { return (a.n -= b.n) < 0 ? a.n + mo : a.n; }
mint operator*(mint a, mint b) { return 1LL * a.n * b.n & mo; }
mint &operator+=(mint &a, mint b) { return a = a + b; }
mint &operator-=(mint &a, mint b) { return a = a - b; }
mint &operator*=(mint &a, mint b) { return a = a * b; }
mint &operator<<(ostream &o, mint a) { return o << a.n; }
string s;
const int sz = 1e6 + 1;
mint dpA[sz];
mint dpB[sz];
mint dpC[sz];
mint dp[sz];
void solve()
{
    cin >> s;
    const int n = s.size();
    dpA[0] = 1;
    rep(i, n)
    {
        dpA[i + 1] += dpA[i];
        dpB[i + 1] += dpB[i];
        dpC[i + 1] += dpC[i];
        dp[i + 1] += dp[i];
        if (s[i] == 'A')
            dpB[i + 1] += dpA[i];
        if (s[i] == 'B')
            dpC[i + 1] += dpB[i];
        if (s[i] == 'C')
            dp[i + 1] += dpC[i];
        else
        {
            dpA[i + 1] += dpA[i] * 2;
            dpB[i + 1] += dpB[i] * 2;
            dpC[i + 1] += dpC[i] * 2;
            dp[i+1]+=dp[i*2;
            dpB[i+1]+=dpA[i];
            dpC[i+1]+=dpB[i];
            dp[i+1]+=dpC[i];
        }
    }
    cout << dp[n] << endl;
}
main()
{
    cin.tie(0);
    ios::sync_with_stdio(0);
    solve();
    return 0;
}

Compiler output:
a.cc: In function 'mint& operator<<(std::ostream&, mint)':
a.cc:23:49: error: invalid initialization of reference of type 'mint&' from expression of type 'std::basic_ostream<char>::__ostream_type' {aka 'std::basic_ostream<char>'}
   23 | mint &operator<<(ostream &o, mint a) { return o << a.n; }
      |                                               ~~^~~~~~
a.cc: In function 'void solve()':
a.cc:52:28: error: expected ']' before ';' token
   52 |             dp[i+1]+=dp[i*2;
      |                            ^
      |                            ]
a.cc:58:19: error: no match for 'operator<<' (operand types are 'mint' and '<unresolved overloaded function type>')
   58 |     cout << dp[n] << endl;
      |     ~~~~~~~~~~~~~~^~~~~~~
a.cc:23:7: note: candidate: 'mint& operator<<(std::ostream&, mint)'
   23 | mint &operator<<(ostream &o, mint a) { return o << a.n; }
      |       ^~~~~~~~
a.cc:23:27: note:   no known conversion for argument 1 from 'mint' to 'std::ostream&' {aka 'std::basic_ostream<char>&'}
   23 | mint &operator<<(ostream &o, mint a) { return o << a.n; }
      |                  ~~~~~~~~~^
In file included from /usr/include/c++/14/bits/basic_string.h:47,
                 from /usr/include/c++/14/string:54,
                 from /usr/include/c++/14/bits/locale_classes.h:40,
                 from /usr/include/c++/14/bits/ios_base.h:41,
                 from /usr/include/c++/14/ios:44,
                 from /usr/include/c++/14/ostream:40,
                 from /usr/include/c++/14/iostream:41,
                 from a.cc:1:
/usr/include/c++/14/string_view:763:5: note: candidate: 'template<class _CharT, class _Traits> std::basic_ostream<_CharT, _Traits>& std::operator<<(basic_ostream<_CharT, _Traits>&, basic_string_view<_CharT, _Traits>)'
  763 |     operator<<(basic_ostream<_CharT, _Traits>& __os,
      |     ^~~~~~~~
/usr/include/c++/14/string_view:763:5: note:   template argument deduction/substitution failed:
a.cc:58:22: note:   'mint' is not derived from 'std::basic_ostream<_CharT, _Traits>'
   58 |     cout << dp[n] << endl;
      |                      ^~~~
/usr/include/c++/14/bits/basic_string.h:4077:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> std::basic_ostream<_CharT, _Traits>& std::operator<<(basic_ostream<_CharT, _Traits>&, const __cxx11::basic_string<_CharT, _Traits, _Allocator>&)'
 4077 |     operator<<(basic_ostream<_CharT, _Traits>& __os,
      |     ^~~~~~~~
/usr/include/c++/14/bits/basic_string.h:4077:5: note:   template argument deduction/substitution failed:
a.cc:58:22: note:   'mint' is not derived from 'std::basic_ostream<_CharT, _Traits>'
   58 |     cout << dp[n] << endl;
      |                      ^~~~
In file included from /usr/include/c++/14/bits/memory_resource.h:38,
                 from /usr/include/c++/14/string:68:
/usr/include/c++/14/cstddef:125:5: note: candidate: 'template<class _IntegerType> constexpr std::__byte_op_t<_IntegerType> std::operator<<(byte, _IntegerType)'
  125 |     operator<<(byte __b, _IntegerType __shift) noexcept
      |     ^~~~~~~~
/usr/include/c++/14/cstddef:125:5: note:   template argument deduction/substitution failed:
a.cc:58:22: note:   couldn't deduce template parameter '_IntegerType'
   58 |     cout << dp[n] << endl;
      |                      ^~~~
In file included from /usr/include/c++/14/bits/ios_base.h:46:
/usr/include/c++/14/system_error:339:5: note: candidate: 'template<class _CharT, class _Traits> std::basic_ostream<_CharT, _Traits>& std::operator<<(basic_ostream<_CharT, _Traits>&, const error_code&)'
  339 |     operator<<(basic_ostream<_CharT, _Traits>& __os, const error_code& __e)
      |     ^~~~~~~~
/usr/include/c++/14/system_error:339:5: note:   template argument deduction/substitution failed:
a.cc:58:22: note:   'mint' is not derived from 'std::basic_ostream<_CharT, _Traits>'
   58 |     cout << dp[n] << endl;
      |                      ^~~~
/usr/include/c++/14/ostream:563:5: note: candidate: 'template<class _CharT, class _Traits> std::basic_ostream<_CharT, _Traits>& std::operator<<(basic_ostream<_CharT, _Traits>&, _CharT)'
  563 |     operator<<(basic_ostream<_CharT, _Traits>& __out, _CharT __c)
      |     ^~~~~~~~
/usr/include/c++/14/ostream:563:5: note:   template argument deduction/substitution failed:
a.cc:58:22: note:   'mint' is not derived from 'std::basic_ostream<_CharT, _Traits>'
   58 |     cout << dp[n] << endl;
      |                      ^~~~
/usr/include/c++/14/ostream:573:5: note: candidate: 'template<class _CharT, class _Traits> std::basic_ostream<_CharT, _Traits>& std::operator<<(basic_ostream<_CharT, _Traits>&, char)'
  573 |     operator<<(basic_ostream<_CharT, _Traits>& __out, char __c)
      |     ^~~~~~~~
/usr/include/c++/14/ostream:573:5: note:   template argument deduction/substitution failed:
a.cc:58:22: note:   'mint' is not derived from 'std::basic_ostream<_CharT, _Traits>'
   58 |     cout << dp[n] << endl;
      |                      ^~~~
/usr/include/c++/14/ostream:579:5: note: candidate: 'template<class _Traits> std::basic_ostream<char, _Traits>& std::operator<<(basic_ostream<char, _Traits>&, char)'
  579 |     operator<<(basic_ostream<char, _Traits>& __out, char __c)
      |     ^~~~~~~~
/usr/include/c++/14/ostream:579:5: note:   template argument deduction/substitution failed:
a.cc:58:22: note:   'mint' is not derived from 'std::basic_ostream<char, _Traits>'
   58 |     cout << dp[n] << endl;
      |                      ^~~~
/usr/include/c++/14/ostream:590:5: note: candidate: 'template<class _Traits> std::basic_ostream<char, _Traits>& std::operator<<(basic_ostream<char, _Traits>&, signed char)'
  590 |     operator<<(basic_ostream<char, _Traits>& __out, signed char __c)
      |     ^~~~~~~~
/usr/include/c++/14/ostream:590:5: note:   template argument deduction/substitution failed:
a.cc:58:22: note:   'mint' is not derived from 'std::basic_ostream<char, _Traits>'
   58 |     cout << dp[n] << endl;
      |                      ^~~~
/usr/include/c++/14/ostream:595:5: note: candidate: 'template<class _Traits> std::basic_ostream<char, _Traits>& std::operator<<(basic_ostream<char, _Traits>&, unsigned char)'
  595 |     operator<<(basic_ostream<char, _Traits>& __out, unsigned char __c)
      |     ^~~~~~~~
/usr/include/c++/14/ostream:595:5: note:   template argument deduction/substitution failed:
a.cc:58:22: note:   'mint' is not derived from 'std::basic_ostream<char, _Traits>'
   58 |     cout << dp[n] << endl;
      |                      ^~~~
/usr/include/c++/14/ostream:654:5: note: candidate: 'template<class _CharT, class _Traits> std::basic_ostream<_CharT, _Traits>& std::operator<<(basic_ostream<_CharT, _Traits>&, const _CharT*)'
  654 |     operator<<(basic_ostream<_CharT, _Traits>& __out, const _CharT* __s)
      |     ^~~~~~~~
/usr/include/c++/14/ostream:654:5: note:   template argument deduction/substitution failed:
a.cc:58:22: note:   'mint' is not derived from 'std::basic_ostream<_CharT, _Traits>'
   58 |     cout << dp[n] << endl;
      |                      ^~~~
In file included from /usr/include/c++/14/ostream:1022:
/usr/include/c++/14/bits/ostream.tcc:307:5: note: candidate: 'template<class _CharT, class _Traits> std::basic_ostream<_CharT, _Traits>& std::operator<<(basic_ostream<_CharT, _Traits>&, const char*)'
  307 |     operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s)
      |     ^~~~~~~~
/usr/include/c++/14/bits/ostream.tcc:307:5: note:   template argument deduction/substitution failed:
a.cc:58:22: note:   'mint' is not derived from 'std::basic_ostream<_CharT, _Traits>'
   58 |     cout << dp[n] << endl;
      |                      ^~~~
/usr/include/c++/14/ostream:671:5: note: candidate: 'template<class _Traits> std::basic_ostream<char, _Traits>& std::operator<<(basic_ostream<char, _Traits>&, const char*)'
  671 |     operator<<(basic_ostream<char, _Traits>& __out, const char* __s)
      |     ^~~~~~~~
/usr/include/c++/14/ostream:671:5: note:   template argument deduction/substitution failed:
a.cc:58:22: note:   'mint' is not derived from 'std::basic_ostream<char, _Traits>'
   58 |     cout << dp[n] << endl;
      |                      ^~~~
/usr/include/c++/14/ostream:684:5: note: candidate: 'template<class _Traits> std::basic_ostream<char, _Traits>& std::operator<<(basic_ostream<char, _Traits>&, const signed char*)'
  684 |     operator<<(basic_ostream<char, _Traits>& __out, const signed char* __s)
      |     ^~~~~~~~
/usr/include/c++/14/ostream:684:5: note:   template argument deduction/substitution failed:
a.cc:58:22: note:   'mint' is not derived from 'std::basic_ostream<char, _Traits>'
   58 |     cout << dp[n] << endl;
      |                      ^~~~
/usr/include/c++/14/ostream:689:5: note: candidate: 'template<class _Traits> std::basic_ostream<char, _Traits>& std::operator<<(basic_ostream<char, _Traits>&, const unsigned char*)'
  689 |     operator<<(basic_ostream<char, _Traits>& __out, const unsigned char* __s)
      |     ^~~~~~~~
/usr/include/c++/14/ostream:689:5: note:   template argument deduction/substitution failed:
a.cc:58:22: note:   'mint' is not derived from 'std::basic_ostream<char, _Traits>'
   58 |     cout << dp[n] << endl;
      |                      ^~~~
/usr/include/c++/14/ostream:810:5: note: candidate: 'template<class _Ostream, class _Tp> _Ostream&& std::operator<<(_Ostream&&, const _Tp&)'
  810 |     operator<<(_Ostream&& __os, const _Tp& __x)
      |     ^~~~~~~~
/usr/include/c++/14/ostream:810:5: note:   template argument deduction/substitution failed:
a.cc:58:22: note:   couldn't deduce template parameter '_Tp'
   58 |     cout << dp[n] << endl;
      |                      ^~~~
a.cc: At global scope:
a.cc:60:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   60 | main()
      | ^~~~