Language: C++

#include <bits/stdc++.h>
#define ll long long int
#define MOD 1000000007
#define INF 1e18
#define PI 3.14159265358979

using namespace std;

int main(void){
  string a, b, c;
  cin >> a >> b >> c;

  ll n = a.size();
  ll m = b.size();
  ll l = c.size();



  vector<int> ab(n, 0);
  vector<int> ba(m, 0);
  vector<int> ac(n, 0);
  vector<int> ca(l, 0);
  vector<int> bc(m, 0);
  vector<int> cb(l, 0);
  // a b
  for (int i = 0; i < n; i++){
    for (int j = 0; j < m; j++){
      if (i + j == n){
        ab[i] = 1;
        break;
      }
      if (a[i + j] != b[j] && a[i + j] != '?' && b[j] != '?'){
        break;
      }
      if (j == m - 1){
        ab[i] = 1;
      }
    }
  }

  // b a
  for (int i = 0; i < m; i++){
    for (int j = 0; j < n; j++){
      if (i + j == m){
        ba[i] = 1;
        break;
      }
      if (b[i + j] != a[j] && b[i + j] != '?' && a[j] != '?'){
        break;
      }
      if (j == n - 1){
        ba[i] = 1;
      }
    }
  }
  // a c
  for (int i = 0; i < n; i++){
    for (int j = 0; j < l; j++){
      if (i + j == n){
        ac[i] = 1;
        break;
      }
      if (a[i + j] != c[j] && a[i + j] != '?' && c[j] != '?')
        break;
      if (j == l - 1){
        ac[i] = 1;
      }
    }
  }
  // c a
  for (int i = 0; i < l; i++){
    for (int j = 0; j < n; j++){
      if (i + j == l){
        ca[i] = 1;
        break;
      }
      if (c[i + j] != a[j] && c[i + j] != '?' && a[j] != '?')
        break;
      if (j == n - 1){
        ca[i] = 1;
      }
    }
  }
  // b c
  for (int i = 0; i < m; i++){
    for (int j = 0; j < l; j++){
      if (i + j == m){
        bc[i] = 1;
        break;
      }
      if (b[i + j] != c[j] && b[i + j] != '?' && c[j] != '?')
        break;
      if (j == l - 1){
        bc[i] = 1;
      }
    }
  }
  // c b
  for (int i = 0; i < l; i++){
    for (int j = 0; j < m; j++){
      if (i + j == l){
        cb[i] = 1;
        break;
      }
      if (c[i + j] != b[j] && c[i + j] != '?' && b[j] != '?')
        break;
      if (j == m - 1){
        cb[i] = 1;
      }
    }
  }

  vector<vector<int>> abc(n, vector<int>(m, 0));
  vector<vector<int>> acb(n, vector<int>(l, 0));
  vector<vector<int>> bac(m, vector<int>(n, 0));
  vector<vector<int>> bca(m, vector<int>(l, 0));
  vector<vector<int>> cab(l, vector<int>(n, 0));
  vector<vector<int>> cba(l, vector<int>(m, 0));
  for (int i = 0; i < n; i++){
    for (int j = 0; j < m; j++){
      if (n - a - j > 0 && ab[i] && bc[j]){
        for (int k = 0; k < min(n - i - j, m - j, l); k++){

        }
      }
    }
  }

  ll res = n + m + l;

  
  // a b c
  for (int i = 0; i < n; i++){
    if (ab[i])
      res = min(res, max(n, i + m) + l);
    for (int j = 0; j < m; j++){
      if (i + j >= n){
        if (ab[i] && bc[j])
          res = min(res, max(n, max(i + m, i + j + l)));
      }
      else {
        if (ab[i] && bc[j] && ac[i + j])
          res = min(res, max(n, max(i + m, i + j + l)));
      }
    }
  }
  // a c b
  for (int i = 0; i < n; i++){
    if (ac[i])
      res = min(res, max(n, i + l) + m);
    for (int j = 0; j < l; j++){
      if (i + j >= n){
        if (ac[i] && cb[j])
          res = min(res, max(n, max(i + l, i + j + m)));
      }
      else {
        if (ac[i] && cb[j] && ab[i + j])
          res = min(res, max(n, max(i + l, i + j + m)));
      }
    }
  }
  // b a c
  for (int i = 0; i < m; i++){
    if (ba[i])
      res = min(res, max(m, i + n) + l);
    for (int j = 0; j < n; j++){
      if (i + j >= m){
        if (ba[i] && ac[j])
          res = min(res, max(m, max(i + n, i + j + l)));
      }
      else {
        if (ba[i] && ac[j] && bc[i + j])
          res = min(res, max(m, max(i + n, i + j + l)));
      }
    }
  }
  // b c a
  for (int i = 0; i < m; i++){
    if (bc[i])
      res = min(res, max(m, i + l) + n);
    for (int j = 0; j < l; j++){
      if (i + j >= m){
        if (bc[i] && ca[j])
          res = min(res, max(m, max(i + l, i + j + n)));
      }
      else {
        if (bc[i] && ca[j] && ba[i + j])
          res = min(res, max(m, max(i + l, i + j + n)));
      }
    }
  }
  // c a b
  for (int i = 0; i < l; i++){
    if (ca[i])
      res = min(res, max(l, i + n) + m);
    for (int j = 0; j < n; j++){
      if (i + j >= l){
        if (ca[i] && ab[j])
          res = min(res, max(l, max(i + n, i + j + m)));
      }
      else {
        if (ca[i] && ab[j] && cb[i + j])
          res = min(res, max(l, max(i + n, i + j + m)));
      }
    }
  }
  // c b a
  for (int i = 0; i < l; i++){
    if (cb[i])
      res = min(res, max(l, i + m) + n);
    for (int j = 0; j < m; j++){
      if (i + j >= l){
        if (cb[i] && ba[j])
          res = min(res, max(l, max(i + m, i + j + n)));
      }
      else {
        if (cb[i] && ba[j] && ca[i + j])
          res = min(res, max(l, max(i + m, i + j + n)));
      }
    }
  }
  


  cout << res << endl;

  return 0;
}


Compiler output:
a.cc: In function 'int main()':
a.cc:121:13: error: no match for 'operator-' (operand types are 'long long int' and 'std::string' {aka 'std::__cxx11::basic_string<char>'})
  121 |       if (n - a - j > 0 && ab[i] && bc[j]){
      |           ~ ^ ~
      |           |   |
      |           |   std::string {aka std::__cxx11::basic_string<char>}
      |           long long int
In file included from /usr/include/c++/14/bits/stl_algobase.h:67,
                 from /usr/include/c++/14/algorithm:60,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:51,
                 from a.cc:1:
/usr/include/c++/14/bits/stl_iterator.h:618:5: note: candidate: 'template<class _IteratorL, class _IteratorR> constexpr decltype ((__y.base() - __x.base())) std::operator-(const reverse_iterator<_Iterator>&, const reverse_iterator<_IteratorR>&)'
  618 |     operator-(const reverse_iterator<_IteratorL>& __x,
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_iterator.h:618:5: note:   template argument deduction/substitution failed:
a.cc:121:15: note:   mismatched types 'const std::reverse_iterator<_Iterator>' and 'long long int'
  121 |       if (n - a - j > 0 && ab[i] && bc[j]){
      |               ^
/usr/include/c++/14/bits/stl_iterator.h:1790:5: note: candidate: 'template<class _IteratorL, class _IteratorR> constexpr decltype ((__x.base() - __y.base())) std::operator-(const move_iterator<_IteratorL>&, const move_iterator<_IteratorR>&)'
 1790 |     operator-(const move_iterator<_IteratorL>& __x,
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_iterator.h:1790:5: note:   template argument deduction/substitution failed:
a.cc:121:15: note:   mismatched types 'const std::move_iterator<_IteratorL>' and 'long long int'
  121 |       if (n - a - j > 0 && ab[i] && bc[j]){
      |               ^
In file included from /usr/include/c++/14/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:127:
/usr/include/c++/14/complex:370:5: note: candidate: 'template<class _Tp> std::complex<_Tp> std::operator-(const complex<_Tp>&, const complex<_Tp>&)'
  370 |     operator-(const complex<_Tp>& __x, const complex<_Tp>& __y)
      |     ^~~~~~~~
/usr/include/c++/14/complex:370:5: note:   template argument deduction/substitution failed:
a.cc:121:15: note:   mismatched types 'const std::complex<_Tp>' and 'long long int'
  121 |       if (n - a - j > 0 && ab[i] && bc[j]){
      |               ^
/usr/include/c++/14/complex:379:5: note: candidate: 'template<class _Tp> std::complex<_Tp> std::operator-(const complex<_Tp>&, const _Tp&)'
  379 |     operator-(const complex<_Tp>& __x, const _Tp& __y)
      |     ^~~~~~~~
/usr/include/c++/14/complex:379:5: note:   template argument deduction/substitution failed:
a.cc:121:15: note:   mismatched types 'const std::complex<_Tp>' and 'long long int'
  121 |       if (n - a - j > 0 && ab[i] && bc[j]){
      |               ^
/usr/include/c++/14/complex:388:5: note: candidate: 'template<class _Tp> std::complex<_Tp> std::operator-(const _Tp&, const complex<_Tp>&)'
  388 |     operator-(const _Tp& __x, const complex<_Tp>& __y)
      |     ^~~~~~~~
/usr/include/c++/14/complex:388:5: note:   template argument deduction/substitution failed:
a.cc:121:15: note:   'std::string' {aka 'std::__cxx11::basic_string<char>'} is not derived from 'const std::complex<_Tp>'
  121 |       if (n - a - j > 0 && ab[i] && bc[j]){
      |               ^
/usr/include/c++/14/complex:465:5: note: candidate: 'template<class _Tp> std::complex<_Tp> std::operator-(const complex<_Tp>&)'
  465 |     operator-(const complex<_Tp>& __x)
      |     ^~~~~~~~
/usr/include/c++/14/complex:465:5: note:   candidate expects 1 argument, 2 provided
In file included from /usr/include/c++/14/valarray:605,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:166:
/usr/include/c++/14/bits/valarray_after.h:406:5: note: candidate: 'template<class _Dom1, class _Dom2> std::_Expr<std::__detail::_BinClos<std::__minus, std::_Expr, std::_Expr, _Dom1, _Dom2>, typename std::__fun<std::__minus, typename _Dom1::value_type>::result_type> std::operator-(const _Expr<_Dom1, typename _Dom1::value_type>&, const _Expr<_Dom2, typename _Dom2::value_type>&)'
  406 |     _DEFINE_EXPR_BINARY_OPERATOR(-, struct std::__minus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:406:5: note:   template argument deduction/substitution failed:
a.cc:121:15: note:   mismatched types 'const std::_Expr<_Dom1, typename _Dom1::value_type>' and 'long long int'
  121 |       if (n - a - j > 0 && ab[i] && bc[j]){
      |               ^
/usr/include/c++/14/bits/valarray_after.h:406:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__minus, std::_Expr, std::_Constant, _Dom, typename _Dom::value_type>, typename std::__fun<std::__minus, typename _Dom1::value_type>::result_type> std::operator-(const _Expr<_Dom1, typename _Dom1::value_type>&, const typename _Dom::value_type&)'
  406 |     _DEFINE_EXPR_BINARY_OPERATOR(-, struct std::__minus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:406:5: note:   template argument deduction/substitution failed:
a.cc:121:15: note:   mismatched types 'const std::_Expr<_Dom1, typename _Dom1::value_type>' and 'long long int'
  121 |       if (n - a - j > 0 && ab[i] && bc[j]){
      |               ^
/usr/include/c++/14/bits/valarray_after.h:406:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__minus, std::_Constant, std::_Expr, typename _Dom::value_type, _Dom>, typename std::__fun<std::__minus, typename _Dom1::value_type>::result_type> std::operator-(const typename _Dom::value_type&, const _Expr<_Dom1, typename _Dom1::value_type>&)'
  406 |     _DEFINE_EXPR_BINARY_OPERATOR(-, struct std::__minus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:406:5: note:   template argument deduction/substitution failed:
a.cc:121:15: note:   'std::string' {aka 'std::__cxx11::basic_string<char>'} is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
  121 |       if (n - a - j > 0 && ab[i] && bc[j]){
      |               ^
/usr/include/c++/14/bits/valarray_after.h:406:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__minus, std::_Expr, std::_ValArray, _Dom, typename _Dom::value_type>, typename std::__fun<std::__minus, typename _Dom1::value_type>::result_type> std::operator-(const _Expr<_Dom1, typename _Dom1::value_type>&, const valarray<typename _Dom::value_type>&)'
  406 |     _DEFINE_EXPR_BINARY_OPERATOR(-, struct std::__minus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:406:5: note:   template argument deduction/substitution failed:
a.cc:121:15: note:   mismatched types 'const std::_Expr<_Dom1, typename _Dom1::value_type>' and 'long long int'
  121 |       if (n - a - j > 0 && ab[i] && bc[j]){
      |               ^
/usr/include/c++/14/bits/valarray_after.h:406:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__minus, std::_ValArray, std::_Expr, typename _Dom::value_type, _Dom>, typename std::__fun<std::__minus, typename _Dom1::value_type>::result_type> std::operator-(const valarray<typename _Dom::value_type>&, const _Expr<_Dom1, typename _Dom1::value_type>&)'
  406 |     _DEFINE_EXPR_BINARY_OPERATOR(-, struct std::__minus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:406:5: note:   template argument deduction/substitution failed:
a.cc:121:15: note:   'std::string' {aka 'std::__cxx11::basic_string<char>'} is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
  121 |       if (n - a - j > 0 && ab[i] && bc[j]){
      |               ^
/usr/include/c++/14/valarray:1197:1: note: candidate: 'template<class _Tp> std::_Expr<std::__detail::_BinClos<std::__minus, std::_ValArray, std::_ValArray, _Tp, _Tp>, typename std::__fun<std::__minus, _Tp>::result_type> std::operator-(const valarray<_Tp>&, const valarray<_Tp>&)'
 1197 | _DEFINE_BINARY_OPERATOR(-, __minus)
      | ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/valarray:1197:1: note:   template argument deduction/substitution failed:
a.cc:121:15: note:   mismatched types 'const std::valarray<_Tp>' and 'long long int'
  121 |       if (n - a - j > 0 && ab[i] && bc[j]){
      |               ^
/usr/include/c++/14/valarray:1197:1: note: candidate: 'template<class _Tp> std::_Expr<std::__detail::_BinClos<std::__minus, std::_ValArray, std::_Constant, _Tp, _Tp>, typename std::__fun<std::__minus, _Tp>::result_type> std::operator-(const valarray<_Tp>&, const typename valarray<_Tp>::value_type&)'
 1197 | _DEFINE_BINARY_OPERATOR(-, __minus)
      | ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/valarray:1197:1: note:   template argument deduction/substitution failed:
a.cc:121:15: note:   mismatched types 'const std::valarray<_Tp>' and 'long long int'
  121 |       if (n - a - j > 0 && ab[i] && bc[j]){
      |               ^
/usr/include/c++/14/valarray:1197:1: note: candidate: 'template<class _Tp> std::_Expr<std::__detail::_BinClos<std::__minus, std::_Constant, std::_ValArray, _Tp, _Tp>, typename std::__fun<std::__minus, _Tp>::result_type> std::operator-(const typename valarray<_Tp>::value_type&, const valarray<_Tp>&)'
 1197 | _DEFINE_BINARY_OPERATOR(-, __minus)
      | ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/valarray:1197:1: note:   template argument deduction/substitution failed:
a.cc:121:15: note:   'std::string' {aka 'std::__cxx11::basic_string<char>'} is not derived from 'const std::valarray<_Tp>'
  121 |       if (n - a - j > 0 && ab[i] && bc[j]){
      |               ^
/usr/include/c++/14/bits/stl_algobase.h: In instantiation of 'constexpr const _Tp& std::min(const _Tp&, const _Tp&, _Compare) [with _Tp = long long int; _Compare = long long int]':
a.cc:122:32:   required from here
  122 |         for (int k = 0; k < min(n - i - j, m - j, l); k++){
      |                             ~~~^~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/stl_algobase.h:284:17: error: '__comp' cannot be used as a function
  284 |       if (__comp(__b, __a))
      |           ~~~~~~^~~~~~~~~~