#include <iostream>
#include <string>
using namespace std;
bool f ( char x)
{
return ( ( x<= '9' ) || ( x>= 'a' && x<= 'z' ) || ( x>= 'A' && x<= 'Z' ) ) ; //Проверяем является ли символ частью числа или переменной.
}
int NOP ( string s, char c) //функция, читающая, сколько раз символ c встречается в строке s
{
int n= 0 ;
if ( s.find_first_of ( c) == s.find_last_of ( c) ) // проверяем, больше ли вхождений символа с в троку, чем 1
{
if ( s.find_first_of ( c) < s.size ( ) && s.find_first_of ( c) > 0 )
return 1 ;
else
return 0 ;
}
size_t i= s.find_first_of ( c) ; //находим первое вхождение символа с и проверяем, не в наале ли он строки. Это делается отдельно, чтобы не выходить за пределы строки.
if ( i! = 0 )
if ( f( s[ i- 1 ] ) && f( s[ i+ 1 ] ) )
n++ ;
s.at ( i) = '_' ;
size_t q= s.find_last_of ( c) ; //Аналогично, находим последнее вхождение символа с
if ( q == s.size ( ) - 1 )
if ( f( s[ i- 1 ] ) && f( s[ i+ 1 ] ) )
n-- ;
while ( i< q)
{
i= s.find_first_of ( c) ;
s.at ( i) = '_' ;
if ( f( s[ i- 1 ] ) && f( s[ i+ 1 ] ) )
n++ ;
}
return n;
}
int main( )
{
string s;
getline( cin ,s) ;
cout << NOP( s,'+' ) + NOP( s,'-' ) + NOP( s,'*' ) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKYm9vbCBmIChjaGFyIHgpCnsKCXJldHVybiAoKHg8PSc5JykgfHwgKHg+PSdhJyAmJiB4PD0neicpIHx8ICh4Pj0nQScgJiYgeDw9J1onKSk7IC8v0J/RgNC+0LLQtdGA0Y/QtdC8INGP0LLQu9GP0LXRgtGB0Y8g0LvQuCDRgdC40LzQstC+0Lsg0YfQsNGB0YLRjNGOINGH0LjRgdC70LAg0LjQu9C4INC/0LXRgNC10LzQtdC90L3QvtC5Lgp9CmludCBOT1AgKHN0cmluZyBzLCBjaGFyIGMpIC8v0YTRg9C90LrRhtC40Y8sINGH0LjRgtCw0Y7RidCw0Y8sINGB0LrQvtC70YzQutC+INGA0LDQtyDRgdC40LzQstC+0LsgYyDQstGB0YLRgNC10YfQsNC10YLRgdGPINCyINGB0YLRgNC+0LrQtSBzCnsKCWludCBuPTA7CgkKCWlmIChzLmZpbmRfZmlyc3Rfb2YoYykgPT0gcy5maW5kX2xhc3Rfb2YoYykpIC8vINC/0YDQvtCy0LXRgNGP0LXQvCwg0LHQvtC70YzRiNC1INC70Lgg0LLRhdC+0LbQtNC10L3QuNC5INGB0LjQvNCy0L7Qu9CwINGBINCyINGC0YDQvtC60YMsINGH0LXQvCAxCgl7CgkJaWYgKHMuZmluZF9maXJzdF9vZihjKTxzLnNpemUoKSAmJiBzLmZpbmRfZmlyc3Rfb2YoYyk+MCkKCQkJcmV0dXJuIDE7CgkJZWxzZQoJCQlyZXR1cm4gMDsKCX0KCQoJc2l6ZV90IGk9cy5maW5kX2ZpcnN0X29mKGMpOyAvL9C90LDRhdC+0LTQuNC8INC/0LXRgNCy0L7QtSDQstGF0L7QttC00LXQvdC40LUg0YHQuNC80LLQvtC70LAg0YEg0Lgg0L/RgNC+0LLQtdGA0Y/QtdC8LCDQvdC1INCyINC90LDQsNC70LUg0LvQuCDQvtC9INGB0YLRgNC+0LrQuC4g0K3RgtC+INC00LXQu9Cw0LXRgtGB0Y8g0L7RgtC00LXQu9GM0L3Qviwg0YfRgtC+0LHRiyDQvdC1INCy0YvRhdC+0LTQuNGC0Ywg0LfQsCDQv9GA0LXQtNC10LvRiyDRgdGC0YDQvtC60LguCglpZiAoaSE9MCkKCQlpZiAoZihzW2ktMV0pJiZmKHNbaSsxXSkpCgkJCW4rKzsKCXMuYXQoaSkgPSAnXyc7CgkKCXNpemVfdCBxPXMuZmluZF9sYXN0X29mKGMpOyAvL9CQ0L3QsNC70L7Qs9C40YfQvdC+LCDQvdCw0YXQvtC00LjQvCDQv9C+0YHQu9C10LTQvdC10LUg0LLRhdC+0LbQtNC10L3QuNC1INGB0LjQvNCy0L7Qu9CwINGBCglpZiAocSA9PSBzLnNpemUoKS0xKQoJCWlmIChmKHNbaS0xXSkmJmYoc1tpKzFdKSkKCQkJbi0tOwoJCgl3aGlsZSAoaTxxKQoJewoJCWk9cy5maW5kX2ZpcnN0X29mKGMpOwoJCXMuYXQoaSkgPSAnXyc7CgkJaWYgKGYoc1tpLTFdKSYmZihzW2krMV0pKQoJCQluKys7Cgl9CglyZXR1cm4gbjsKfQoKaW50IG1haW4oKQp7CglzdHJpbmcgczsKCWdldGxpbmUoY2luLHMpOwoJY291dDw8Tk9QKHMsJysnKStOT1AocywnLScpK05PUChzLCcqJyk7CglyZXR1cm4gMDsKfQ==