#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 1e5 + 5;
int n;
string s;
int open_pos[N]; // open_pos[i] = Vị trí của ngoặc mở tương ứng với ngoặc đóng s[i]
int dp[N]; // dp[i] = Số lượng xâu con liên tiếp kết thúc tại i thoả mãn là dãy ngoặc đúng
// c có phải ngoặc mở
bool is_open(char c) {
return (c == '(' || c == '[' || c == '{' || c == '<');
}
// ngoặc đóng tương ứng với ngoặc mở c
char close(char c) {
if (c == '(') return ')';
if (c == '[') return ']';
if (c == '{') return '}';
return '>';
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
// freopen("tbrackets.inp", "r", stdin);
// freopen("tbrackets.out", "w", stdout);
cin >> s;
n = s.size();
s = ' ' + s;
memset(open_pos, -1, sizeof open_pos);
vector<int> st;
for (int i = 1; i <= n; i++) {
if (is_open(s[i])) {
st.push_back(i);
}
else {
if (!st.empty()) {
if (s[i] == close(s[st.back()])) {
open_pos[i] = st.back();
st.pop_back();
}
else {
st.clear();
}
}
}
}
for (int i = 1; i <= n; i++) {
if (open_pos[i] == -1) continue;
dp[i] = 1 + dp[open_pos[i] - 1];
}
ll ans = 0;
for (int i = 1; i <= n; i++) {
ans += dp[i];
}
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE4gPSAxZTUgKyA1OyAKCmludCBuOyAgCnN0cmluZyBzOyAgCmludCBvcGVuX3Bvc1tOXTsgLy8gb3Blbl9wb3NbaV0gPSBW4buLIHRyw60gY+G7p2Egbmdv4bq3YyBt4bufIHTGsMahbmcg4bupbmcgduG7m2kgbmdv4bq3YyDEkcOzbmcgc1tpXSAKaW50IGRwW05dOyAvLyBkcFtpXSA9IFPhu5EgbMaw4bujbmcgeMOidSBjb24gbGnDqm4gdGnhur9wIGvhur90IHRow7pjIHThuqFpIGkgdGhv4bqjIG3Do24gbMOgIGTDo3kgbmdv4bq3YyDEkcO6bmcKCi8vIGMgY8OzIHBo4bqjaSBuZ2/hurdjIG3hu58KYm9vbCBpc19vcGVuKGNoYXIgYykgewoJcmV0dXJuIChjID09ICcoJyB8fCBjID09ICdbJyB8fCBjID09ICd7JyB8fCBjID09ICc8Jyk7IAp9CgovLyBuZ2/hurdjIMSRw7NuZyB0xrDGoW5nIOG7qW5nIHbhu5tpIG5nb+G6t2MgbeG7nyBjCmNoYXIgY2xvc2UoY2hhciBjKSB7CglpZiAoYyA9PSAnKCcpIHJldHVybiAnKSc7IAoJaWYgKGMgPT0gJ1snKSByZXR1cm4gJ10nOyAKCWlmIChjID09ICd7JykgcmV0dXJuICd9JzsgCglyZXR1cm4gJz4nOyAKfQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAoJY2luLnRpZShudWxscHRyKTsgCQoJLy8gZnJlb3BlbigidGJyYWNrZXRzLmlucCIsICJyIiwgc3RkaW4pOyAKCS8vIGZyZW9wZW4oInRicmFja2V0cy5vdXQiLCAidyIsIHN0ZG91dCk7IAoJY2luID4+IHM7ICAKCW4gPSBzLnNpemUoKTsgCglzID0gJyAnICsgczsgIAoKCW1lbXNldChvcGVuX3BvcywgLTEsIHNpemVvZiBvcGVuX3Bvcyk7IAoKCXZlY3RvcjxpbnQ+IHN0OyAKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewoJCWlmIChpc19vcGVuKHNbaV0pKSB7CgkJCXN0LnB1c2hfYmFjayhpKTsgCgkJfQoJCWVsc2UgewoJCQlpZiAoIXN0LmVtcHR5KCkpIHsKCQkJCWlmIChzW2ldID09IGNsb3NlKHNbc3QuYmFjaygpXSkpIHsKCQkJCQlvcGVuX3Bvc1tpXSA9IHN0LmJhY2soKTsgCgkJCQkJc3QucG9wX2JhY2soKTsgCgkJCQl9CgkJCQllbHNlIHsKCQkJCQlzdC5jbGVhcigpOyAKCQkJCX0KCQkJfQoJCX0KCX0JCgoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CgkJaWYgKG9wZW5fcG9zW2ldID09IC0xKSBjb250aW51ZTsgCgkJZHBbaV0gPSAxICsgZHBbb3Blbl9wb3NbaV0gLSAxXTsgCgl9CgoJbGwgYW5zID0gMDsgICAKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewoJCWFucyArPSBkcFtpXTsgCgl9CgoJY291dCA8PCBhbnMgPDwgJ1xuJzsgCn0=