#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9+7;
const int MAXN = 1010;
int N;
int DP[MAXN][MAXN];
char S[MAXN];
int solve(const int idx, const int opened1, const int opened2) {
if (idx == N)
return opened1 == 0 && opened2 == 0;
if (opened1 < 0 || opened2 < 0)
return 0;
if (DP[idx][opened1] != -1)
return DP[idx][opened1];
DP[idx][opened1] = (solve(idx + 1, opened1 + (S[idx] == '[' ? 1 : -1), opened2) +
solve(idx + 1, opened1, opened2 + (S[idx] == '[' ? 1 : -1))) % MOD;
return DP[idx][opened1];
}
int main() {
while (scanf(" %s", S) == 1) {
N = strlen(S);
memset(DP, -1, sizeof(DP));
printf("%d\n", solve(0, 0, 0));
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCBNT0QgPSAxZTkrNzsKY29uc3QgaW50IE1BWE4gPSAxMDEwOwoKaW50IE47CmludCBEUFtNQVhOXVtNQVhOXTsKY2hhciBTW01BWE5dOwoKaW50IHNvbHZlKGNvbnN0IGludCBpZHgsIGNvbnN0IGludCBvcGVuZWQxLCBjb25zdCBpbnQgb3BlbmVkMikgewogICBpZiAoaWR4ID09IE4pCiAgICAgIHJldHVybiBvcGVuZWQxID09IDAgJiYgb3BlbmVkMiA9PSAwOwogICBpZiAob3BlbmVkMSA8IDAgfHwgb3BlbmVkMiA8IDApCiAgICAgIHJldHVybiAwOwogICBpZiAoRFBbaWR4XVtvcGVuZWQxXSAhPSAtMSkKICAgICAgcmV0dXJuIERQW2lkeF1bb3BlbmVkMV07CiAgIERQW2lkeF1bb3BlbmVkMV0gPSAoc29sdmUoaWR4ICsgMSwgb3BlbmVkMSArIChTW2lkeF0gPT0gJ1snID8gMSA6IC0xKSwgb3BlbmVkMikgKwogICAgICAgICAgICAgICAgICAgICAgIHNvbHZlKGlkeCArIDEsIG9wZW5lZDEsIG9wZW5lZDIgKyAoU1tpZHhdID09ICdbJyA/IDEgOiAtMSkpKSAlIE1PRDsKICAgcmV0dXJuIERQW2lkeF1bb3BlbmVkMV07Cn0KCmludCBtYWluKCkgewogICB3aGlsZSAoc2NhbmYoIiAlcyIsIFMpID09IDEpIHsKICAgICAgTiA9IHN0cmxlbihTKTsKICAgICAgbWVtc2V0KERQLCAtMSwgc2l6ZW9mKERQKSk7CiAgICAgIHByaW50ZigiJWRcbiIsIHNvbHZlKDAsIDAsIDApKTsKICAgfQogICByZXR1cm4gMDsKfQo=