#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace atcoder; #define overload4(a,b,c,d,name,...) name #define overload3(a,b,c,name,...) name #define rep1(i,n) for(ll i=0;i<(n);++i) #define rep2(i,a,b) for(ll i=(a);i<(b);++i) #define rep3(i,a,b,c) for(ll i=(a);i<(b);i+=(c)) #define rep(...) overload4(__VA_ARGS__,rep3,rep2,rep1)(__VA_ARGS__) #define rrep1(i,n) for(ll i=(n)-1;i>=0;i--) #define rrep2(i,a,b) for(ll i=(b)-1;i>=(a);--i) #define rrep3(i,a,b,c) for(ll i=(b)-1;i>=(a);i-=(c)) #define rrep(...) overload4(__VA_ARGS__,rrep3,rrep2,rrep1)(__VA_ARGS__) #define ALL1(i) begin(i),end(i) #define ALL2(i,a) begin(i),begin(i)+a #define ALL3(i,a,b) begin(i)+a,begin(i)+b #define ALL(...) overload3(__VA_ARGS__,ALL3,ALL2,ALL1)(__VA_ARGS__) #define sz(a) ((ll)a.size()) #define lb(v, x) distance((v).begin(), lower_bound(ALL(v), (x))) #define lbg(v, x) distance((v).begin(), lower_bound(ALL(v), (x), greater{})) #define ub(v, x) distance((v).begin(), upper_bound(ALL(v), (x))) #define ubg(v, x) distance((v).begin(), upper_bound(ALL(v), (x), greater{})) #define SORT(v) sort(ALL(v)) #define RSORT(v) sort(rbegin(v),rend(v)) #define REV(v) reverse(ALL(v)) using ll = long long; using ull = unsigned long long; using P = pair; using vb = vector; using vvb = vector; using vc = vector; using vvc = vector; using vi = vector; using vvi = vector; using vvvi = vector; using vvvvi = vector; using vl = vector; using vvl = vector; using vvvl = vector; using vvvvl = vector; using vd = vector; using vvd = vector; using vp = vector

; using vvp = vector; using vs = vector; using vvs = vector; constexpr ll LINF=2e18; constexpr ll INF=1001001001; constexpr int dx[8]={-1,0,1,0,-1,1,1,-1}; constexpr int dy[8]={0,1,0,-1,1,1,-1,-1}; template inline bool chmax(T1 &a, T2 b) {return ((a < b) ? (a = b, true) : (false));} template inline bool chmin(T1 &a, T2 b) {return ((a > b) ? (a = b, true) : (false));} template inline bool inRange(const T1 &x, const T2 &l, const T3 &r) {return l <= x & x < r;} constexpr ll div_floor(ll x, ll y) {assert(y != 0); return (x - ((x%y+y)%y)) / y;} constexpr ll div_ceil(ll x, ll y) {assert(y != 0); return (x + ((y-x%y)%y)) / y;} using mint = modint998244353; using vm = vector; using vvm = vector; using vvvm = vector; using vvvvm = vector; int main() { string s; cin >> s; vc c, pre; rep(i,sz(s)) { if(s[i] == '<') { c.push_back(s[i]); pre.push_back('<'); } if(s[i] == '=') { c.push_back(s[i]); } if(s[i] == '>') { if(sz(pre) > 0 && pre.back() == '<' && c.back() == '=') { while(c.back() == '=') { c.pop_back(); } c.pop_back(); pre.pop_back(); } else { c.push_back('>'); pre.push_back('>'); } } } cout << sz(c) << endl; return 0; }