#include using namespace std; typedef long long ll; typedef vector< int > vi; typedef vector< vi > vvi; typedef vector< ll > vl; typedef vector< vl > vvl; typedef pair< int, int > pii; typedef vector< pii > vp; template< class T1, class T2 > int upmin( T1 &x, T2 v ){ if( x > v ){ x = v; return 1; } return 0; } template< class T1, class T2 > int upmax( T1 &x, T2 v ){ if( x < v ){ x = v; return 1; } return 0; } const int INF = 0x3f3f3f3f; string S; void init(){ cin >> S; } vvl dp; void preprocess(){ dp = vvl( S.size() + 1, vl( 4 + 1 ) ); for( int i = 0; i < S.size(); ++i ){ switch( S[ i ] ){ case ')': dp[ i + 1 ][ 4 ] += dp[ i ][ 3 ]; break; case '*': dp[ i + 1 ][ 3 ] += dp[ i ][ 2 ]; break; case '^': dp[ i + 1 ][ 2 ] += dp[ i ][ 1 ]; dp[ i + 1 ][ 1 ] += dp[ i ][ 0 ]; break; case '(': ++dp[ i + 1 ][ 0 ]; break; } } cout << dp[ S.size() ][ 4 ] << " "; dp = vvl( S.size() + 1, vl( 4 + 1 ) ); for( int i = 0; i < S.size(); ++i ){ switch( S[ i ] ){ case ')': dp[ i + 1 ][ 4 ] += dp[ i ][ 3 ]; break; case '*': dp[ i + 1 ][ 1 ] += dp[ i ][ 0 ]; break; case '^': dp[ i + 1 ][ 3 ] += dp[ i ][ 2 ]; dp[ i + 1 ][ 2 ] += dp[ i ][ 1 ]; break; case '(': ++dp[ i + 1 ][ 0 ]; break; } for( int j = 0; j < 4; ++j ) dp[ i + 1 ][ j ] += dp[ i ][ j ]; } cout << dp[ S.size() ][ 4 ] << endl; } void solve(){ } signed main(){ ios::sync_with_stdio( 0 ); init(); preprocess(); solve(); return 0; }