/*
	?§£????????????:Shipura
	(http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2570)

	-status:

	-comment:
        
*/
var log = console.log;
if (typeof process != "undefined") {
    var input = "";
    process.stdin.resume();
    process.stdin.setEncoding('utf8');
    process.stdin.on('data', function(chunk) {
        input += chunk;
    });
    process.stdin.on('end', function() {
        var lines = input.split("\n");
        main(lines);
    });
}


function main(lines) {
    lines.forEach(function(line) {
        if (line != "#") {
            processLine(line);
        }
    }, this);
}

//S<x>?????????
function S(x) {
    var d = 1000000007;
    if (x > 500000000) {
        //overflow??????
        x = x - d;
    }
    var p = x * x;
    return p % d;
}
//x>>y?????????
function T(x, y) {
    return Math.floor(x / Math.pow(2, y));
}

//remove s and spaces
function eliminate(line) {
    return line.replace(/\s|S/g, '');
}

//x ??? string
function is_number(x) {
    var n = Number(x);
    var s = n.toString();
    //?????£??????true
    return Boolean(s !== "NaN");
}

//<,>,??°????????????
function divide_1st(line) {
    line = line.split('');
    var len = line.length;
    var start = 0;
    var end = 0;
    var new_line = [];
    var is_now_number = false;
    for (var i = 0; i < len; i++) {
        var e = line[i];
        if (!is_now_number && is_number(e)) {
            //??°??????????????§??????????????°????????£??????????????????
            start = i;
            is_now_number = true;
        } else if (is_now_number && !is_number(e)) {
            //????????????????????§elseif??§?????????
            //??°???????????????????????????
            end = i;
            is_now_number = false;
            //??°???????????¨??????push
            var a = line.slice(start, end);
            var s = a.join('');
            var p = Number(s);
            new_line.push(p);
        }
        if (!is_number(e)) {
            //??°?????§????????????push
            new_line.push(e);
        }
    }
    //for???????????????????????????is_now_number???????¶????????????????
    if (is_now_number) {
        end = len;
        var a = line.slice(start, end);
        var s = a.join('');
        var p = Number(s);
        new_line.push(p);
    }
    return new_line;
}

//>??????S<>????????¨?????????>>????????¨?????????????????????
/*
??????????????????????¨???????
p...S<x>???<
q...S<x>???>
L...19,331???????????°???(literal)
t...>>????????¨
??????t????¬???????????????????p???L????????\????????¨????????§???????????¨?????????????????????
??????????????????>????¬??????????>???L?????????????????????????????????????????§????????°??????>????????????..??????
 */
function is_q(i, line) {
    var ret = true;
    if (line[i + 1] == '>') {
        if (is_number(line[i + 2]) || line[i + 2] == '<') {
            //t??§??????
            ret = false;
        }
    }
    return ret;
}

//token????????????<???p??????>???q??????>>???t?????????
//[p,p,p,10,q,t,10,q,t,10,q]?????????????????????
function tokenizer(line) {
    //q_* ??£????????? > ???????????¨???????????¨???
    var q_start = 0;
    var q_end = 0;
    //??´???
    //?????????
    var new_line = [];

    var len = line.length;
    for (var i = 0; i < len; i++) {
        var e = line[i];
        if (is_number(e)) {
            new_line.push(e);
        } else if (e === '<') {
            new_line.push('p');
        } else if (e === '>') {
            //???????????????????????????
            if (is_q(i, line)) {
                //q?????£??????
                new_line.push('q');
            } else {
                new_line.push('t');
                i += 1; //t??§???????????????????£???¶
            }
        }
    }

    return new_line;
}

//?¨?????????¨?????¢?????????
function treenize(line) {
    var len = line.length;
    var i = 0;
    while (line.length > 1) {
        var e = line[i];
        if (is_number(e)) {

        } else if (e == 'p') {

        } else if (e == 'q') {
            line[i - 2] = S(line[i - 1]);
            line.splice(i - 1, 2);
            i = i - 2;
        } else if (e == 't') {
            line[i - 1] = T(line[i - 1], line[i + 1]);
            line.splice(i, 2);
            i = i - 1;
        }
        i++;
    }
    return line;
}

function processLine(line) {
    line = eliminate(line);
    line = divide_1st(line);
    line = tokenizer(line);
    line = treenize(line);
    line = line[0];
    log(line);
}