#include<bits/stdc++.h>
using namespace std;

using i64 = int64_t;

pair<string, int> Cipher(string s, int idx);
pair<string, int> Cipher_(string s, int idx);
pair<string, int> String(string s, int idx);
pair<string, int> Letter(string s, int idx);

pair<string, int> Cipher(string s, int idx){
    auto res = String(s, idx);
    auto p = Cipher_(s, idx+res.second);
    res.first += p.first;
    res.second += p.second;
    return res;
}

pair<string, int> Cipher_(string s, int idx){
    if(idx >= s.size() || s[idx] == ']'){
        return make_pair("", 0);
    }
    auto res = String(s, idx);
    auto p = Cipher_(s, idx+res.second);
    res.first += p.first;
    res.second += p.second;
    return res;
}

pair<string, int> String(string s, int idx){
    pair<string, int> res;
    if(s[idx] == '['){
        res = Cipher(s, idx+1);
        reverse(res.first.begin(), res.first.end());
        res.second += 2;
    }else{
        res = Letter(s, idx);
        string str = res.first;
        if(str[0] == '?')str[0] = 'A';
        res.first = str;
    }
    return res;
}

pair<string, int> Letter(string s, int idx){
    pair<string, int> res;
    if(s[idx] == '+'){
        auto p = Letter(s, idx+1);
        string str = p.first;
        char c = str.back();
        if(c != '?'){
            if(c == 'Z')str[str.size()-1] = 'A';
            else str[str.size()-1]++;
        }
        res = make_pair(str, p.second+1);
    }else if(s[idx] == '-'){
        auto p = Letter(s, idx+1);
        string str = p.first;
        char c = str.back();
        if(c != '?'){
            if(c == 'A')str[str.size()-1] = 'Z';
            else str[str.size()-1]--;
        }
        res = make_pair(str, p.second+1);
    }else{
        res = make_pair(s[idx], 1);
    }
    return res;
}

int main(){
    string s;
    while(cin >> s, s != "."){
        cout << Cipher(s, 0).first << endl;
    }

    return 0;
}

