#include <bits/stdc++.h>
using namespace std;
template <class T1, class T2>
inline istream& operator>>(istream& fin, pair<T1, T2>& pr) {
  fin >> pr.first >> pr.second;
  return fin;
}
template <class T0, class T1, class T2>
inline istream& operator>>(istream& fin, tuple<T0, T1, T2>& t) {
  fin >> get<0>(t) >> get<1>(t) >> get<2>(t);
  return fin;
}
template <class T>
inline istream& operator>>(istream& fin, vector<T>& a) {
  for (auto& u : a) fin >> u;
  return fin;
}
template <class T, size_t n>
inline istream& operator>>(istream& fin, array<T, n>& a) {
  for (auto& u : a) fin >> u;
  return fin;
}
size_t e404() {
  string str;
  cin >> str;
  const auto rchar = str.back();
  const int n = str.length();
  const int rcnt = count(begin(str), end(str), rchar);
  const int lcnt = n - rcnt;
  const int pos = rcnt - lcnt;
  vector<int> roll(lcnt + 1);
  int idx = 0, btm = 0;
  for (size_t j = 0; j + 1 < str.length(); ++j) {
    idx += str[j] == rchar ? 1 : -1;
    if (btm < -idx) roll[(btm = -idx)] = idx;
    roll[btm] = max(roll[btm], idx);
  }
  const auto y = *max_element(begin(roll), end(roll));
  if (0 < pos && y < pos) return 1;
  auto z = roll[btm];
  int out = 0;
  for (int i = btm; 0 < i; --i) {
    const auto x = pos + btm - i + 1;
    z = max(z + 1, roll[i - 1]);
    out += max({0, y, z}) < x;
  }
  return out;
}
int main(const int argc, char* argv[]) {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cout << e404();
  return EXIT_SUCCESS;
}
