#include <unordered_map>
#include <algorithm>
#include <iostream>
#include <string>
#include <stack>
template<typename BiIter> void run(BiIter first, BiIter last) {
std::size_t dp=0;
std::unordered_map<std::size_t, int> data;
std::stack<BiIter> jmps;
for(auto it=first; it!=last; ++it) {
switch(*it) {
case '>': ++dp; break;
case '<': --dp; break;
case '+': ++data[dp]; break;
case '-': --data[dp]; break;
case '.':
std::cout << static_cast<char>(data[dp]);
break;
case ',': {
char c;
std::cin >> c;
data[dp]=c;
break;
}
case '[':
if(data[dp]==0)
it=std::find(it, last, ']');
else
jmps.push(it);
break;
case ']':
it=jmps.top()-1;
jmps.pop();
break;
}
}
}
void run(const std::string& code) { run(code.begin(), code.end()); }
int main() {
std::string program="++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.";
run(program);
}
I2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHN0YWNrPgoKdGVtcGxhdGU8dHlwZW5hbWUgQmlJdGVyPiB2b2lkIHJ1bihCaUl0ZXIgZmlyc3QsIEJpSXRlciBsYXN0KSB7CiAgICBzdGQ6OnNpemVfdCBkcD0wOwogICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c2l6ZV90LCBpbnQ+IGRhdGE7CiAgICBzdGQ6OnN0YWNrPEJpSXRlcj4gam1wczsKCiAgICBmb3IoYXV0byBpdD1maXJzdDsgaXQhPWxhc3Q7ICsraXQpIHsKICAgICAgICBzd2l0Y2goKml0KSB7CiAgICAgICAgY2FzZSAnPic6ICsrZHA7ICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJzwnOiAtLWRwOyAgICAgICBicmVhazsKICAgICAgICBjYXNlICcrJzogKytkYXRhW2RwXTsgYnJlYWs7CiAgICAgICAgY2FzZSAnLSc6IC0tZGF0YVtkcF07IGJyZWFrOwogICAgICAgIGNhc2UgJy4nOiAKICAgICAgICAgICAgc3RkOjpjb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KGRhdGFbZHBdKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnLCc6IHsKICAgICAgICAgICAgY2hhciBjOwogICAgICAgICAgICBzdGQ6OmNpbiA+PiBjOwogICAgICAgICAgICBkYXRhW2RwXT1jOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2FzZSAnWyc6IAogICAgICAgICAgICBpZihkYXRhW2RwXT09MCkgCiAgICAgICAgICAgICAgIGl0PXN0ZDo6ZmluZChpdCwgbGFzdCwgJ10nKTsKICAgICAgICAgICAgZWxzZSAKICAgICAgICAgICAgICAgam1wcy5wdXNoKGl0KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnXSc6IAogICAgICAgICAgICBpdD1qbXBzLnRvcCgpLTE7CiAgICAgICAgICAgIGptcHMucG9wKCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gICAKICAgIH0gICAKfSAgIAp2b2lkIHJ1bihjb25zdCBzdGQ6OnN0cmluZyYgY29kZSkgeyBydW4oY29kZS5iZWdpbigpLCBjb2RlLmVuZCgpKTsgfQppbnQgbWFpbigpIHsKICAgIHN0ZDo6c3RyaW5nIHByb2dyYW09IisrKysrKysrKytbPisrKysrKys+KysrKysrKysrKz4rKys+Kzw8PDwtXT4rKy4+Ky4rKysrKysrLi4rKysuPisrLjw8KysrKysrKysrKysrKysrLj4uKysrLi0tLS0tLS4tLS0tLS0tLS4+Ky4+LiI7CiAgICBydW4ocHJvZ3JhbSk7Cn0g