#include <bits/stdc++.h>
using namespace std;
int n;
string s;
int ans;
int pr[(int)2e6 + 5], mxpr[(int)2e6 + 5];
int ok[(int)2e6 + 5], dp[(int)2e6 + 5];
vector<int> pos[(int)2e6 + 5];
int seg[10000001];
void build(int idx, int lo, int hi) {
  if (lo == hi) {
    seg[idx] = pr[lo];
    return;
  }
  int mid = (lo + hi) / 2;
  build(2 * idx, lo, mid);
  build(2 * idx + 1, mid + 1, hi);
  seg[idx] = max(seg[2 * idx], seg[2 * idx + 1]);
}
int query(int idx, int lo, int hi, int st, int en) {
  if (lo == st && hi == en) return seg[idx];
  int mid = (lo + hi) / 2;
  if (en <= mid)
    return query(2 * idx, lo, mid, st, en);
  else if (st > mid)
    return query(2 * idx + 1, mid + 1, hi, st, en);
  else
    return max(query(2 * idx, lo, mid, st, mid),
               query(2 * idx + 1, mid + 1, hi, mid + 1, en));
}
void go(int ty) {
  int cen = (int)1e6 + 1;
  for (int i = 0; i <= 2e6 + 2; ++i) pos[i].clear();
  pr[0] = cen;
  mxpr[0] = cen;
  pos[cen].push_back(0);
  for (int i = 1; i <= n; ++i) {
    pr[i] = pr[i - 1];
    if (s[i] == 'R')
      pr[i]++;
    else
      pr[i]--;
    pos[pr[i]].push_back(i);
    mxpr[i] = max(mxpr[i - 1], pr[i]);
  }
  build(1, 1, n);
  ok[n] = 1;
  dp[n] = 0;
  if (s[n] == 'R') dp[n] = 1;
  int pmx = -1e9;
  for (int i = n - 1; i >= 1; i--) {
    if (s[i] == 'L') {
      ok[i] = ok[i + 1];
      dp[i] = dp[i + 1];
    } else if (pos[pr[i - 1]].back() == i - 1) {
      if (pr[n] <= pmx)
        ok[i] = 0;
      else {
        ok[i] = 1;
        dp[i] = pr[n] - pr[i - 1];
      }
    } else {
      int nx = upper_bound(pos[pr[i - 1]].begin(), pos[pr[i - 1]].end(), i) -
               pos[pr[i - 1]].begin();
      nx = pos[pr[i - 1]][nx];
      if (nx == n)
        ok[i] = 0;
      else {
        if (!ok[nx + 1])
          ok[i] = 0;
        else {
          if (query(1, 1, n, i, nx) < pr[i] + dp[nx + 1]) {
            dp[i] = dp[nx + 1];
            ok[i] = 1;
          } else
            ok[i] = 0;
        }
      }
    }
    pmx = max(pmx, pr[i]);
  }
  for (int st = 1; st <= cen - 1; ++st) {
    if (pos[st].empty()) continue;
    int fr = pos[st][0];
    int cmx = mxpr[fr - 1];
    if (!ok[fr]) continue;
    if (dp[fr] + st + 1 > cmx) {
      ans++;
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> s;
  n = s.size();
  if (n == 1) {
    cout << 1 << '\n';
    return 0;
  }
  int mx = 0, mi = 0;
  int tot = 0;
  for (int i = 0; i <= n - 1; ++i) {
    if (s[i] == 'R')
      tot++;
    else
      tot--;
    if (i == n - 1) break;
    mx = max(mx, tot);
    mi = min(mi, tot);
  }
  if (tot < 0 && mi > tot) {
    cout << 1 << '\n';
    return 0;
  }
  if (tot > 0 && mx < tot) {
    cout << 1 << '\n';
    return 0;
  }
  s = "$" + s;
  go(0);
  for (int i = 1; i <= n; ++i) {
    if (s[i] == 'R')
      s[i] = 'L';
    else
      s[i] = 'R';
  }
  go(1);
  cout << ans << '\n';
}
