#include <iostream>
#include <string>
#include <cctype>
using namespace std;
bool isBFCommand( char c) {
return c == '>' || c == '<' ||
c == '+' || c == '-' ||
c == '.' || c == ',' ||
c == '[' || c == ']' ;
}
string stringToBrainfuck( const string& s) {
string res;
int dpValue = 0 ;
//ideone still has trouble with range based for?
for ( auto it = s.begin ( ) ; it ! = s.end ( ) ; ++ it) {
char c = * it;
int distance = ( c > dpValue) ? ( c - dpValue) : ( dpValue - c) ;
int direction = ( c > dpValue) ? + 1 : - 1 ;
if ( distance > 127 ) {
distance = 256 - distance;
direction * = - 1 ;
}
res + = ( ! isBFCommand( c) && isprint ( c) ) ? c : ' ' ;
res + = " " + string( distance, ( ( direction == + 1 ) ? '+' : '-' ) )
+ ".\n " ;
dpValue = c;
}
return res;
}
string fetchInput( ) {
string ret, line;
while ( getline( cin , line) )
ret + = line + '\n ' ;
return ret;
}
int main( ) {
cout << stringToBrainfuck( fetchInput( ) ) << "\n " ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8Y2N0eXBlPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKYm9vbCBpc0JGQ29tbWFuZChjaGFyIGMpIHsKCXJldHVybiBjID09ICc+JyB8fCBjID09ICc8JyB8fAoJICAgICAgIGMgPT0gJysnIHx8IGMgPT0gJy0nIHx8CgkgICAgICAgYyA9PSAnLicgfHwgYyA9PSAnLCcgfHwKCSAgICAgICBjID09ICdbJyB8fCBjID09ICddJzsKfQogCnN0cmluZyBzdHJpbmdUb0JyYWluZnVjayhjb25zdCBzdHJpbmcmIHMpIHsKICAgICAgICBzdHJpbmcgcmVzOwogICAgICAgIGludCBkcFZhbHVlID0gMDsKIAogICAgICAgIC8vaWRlb25lIHN0aWxsIGhhcyB0cm91YmxlIHdpdGggcmFuZ2UgYmFzZWQgZm9yPwogICAgICAgIGZvcihhdXRvIGl0ID0gcy5iZWdpbigpOyBpdCAhPSBzLmVuZCgpOyArK2l0KSB7IAogICAgICAgICAgICAgICAgY2hhciBjID0gKml0OwogCiAgICAgICAgICAgICAgICBpbnQgZGlzdGFuY2UgID0gKGMgPiBkcFZhbHVlKSA/IChjIC0gZHBWYWx1ZSkgOiAoZHBWYWx1ZSAtIGMpOwogICAgICAgICAgICAgICAgaW50IGRpcmVjdGlvbiA9IChjID4gZHBWYWx1ZSkgPyArMSA6IC0xOwogCiAgICAgICAgICAgICAgICBpZihkaXN0YW5jZSA+IDEyNykgewogICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZSA9IDI1NiAtIGRpc3RhbmNlOwogICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gKj0gLTE7CiAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgIHJlcyArPSAoIWlzQkZDb21tYW5kKGMpICYmIGlzcHJpbnQoYykpID8gYyA6ICcgJzsKCQlyZXMgKz0gIiAiICsgc3RyaW5nKGRpc3RhbmNlLCAoKGRpcmVjdGlvbiA9PSArMSkgPyAnKycgOiAnLScpICkKCQkgICAgICAgKyAiLlxuIjsKICAgICAgICAgICAgICAgIGRwVmFsdWUgPSBjOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzOwp9CiAKc3RyaW5nIGZldGNoSW5wdXQoKSB7CiAgICAgICAgc3RyaW5nIHJldCwgbGluZTsKICAgICAgICB3aGlsZShnZXRsaW5lKGNpbiwgbGluZSkpCiAgICAgICAgICAgICAgICByZXQgKz0gbGluZSArICdcbic7CiAgICAgICAgcmV0dXJuIHJldDsKfQogCmludCBtYWluKCkgewogICAgICAgIGNvdXQgPDwgc3RyaW5nVG9CcmFpbmZ1Y2soIGZldGNoSW5wdXQoKSApIDw8ICJcbiI7Cn0=