#include <bits/stdc++.h>
using namespace std;
namespace Fastio {
enum io_flags {
  ignore_int = 1 << 0,
  char_enter = 1 << 1,
  flush_stdout = 1 << 2,
  flush_stderr = 1 << 3,
  endline = char_enter | flush_stdout
};
enum number_type_flags {
  output_double_stable = 1 << 0,
  output_double_faster = 1 << 1
};
struct Reader {
  char endch;
  Reader() { endch = '\0'; }
  Reader& operator>>(io_flags f) {
    if (f & ignore_int) {
      endch = getchar();
      while ((!isdigit(endch)) && endch != '-' && endch != EOF)
        endch = getchar();
      while (isdigit(endch = getchar()))
        ;
    }
    return *this;
  }
  Reader& operator>>(char& ch) {
    ch = getchar();
    while (ch == ' ' || ch == '\r' || ch == '\n' || ch == '\t') ch = getchar();
    return *this;
  }
  Reader& operator>>(double& lf) {
    bool flag = 0;
    endch = getchar();
    while ((!isdigit(endch)) && endch != '-' && endch != EOF) endch = getchar();
    if (endch == '-') flag = 1, endch = getchar();
    lf = endch & 15;
    while (isdigit(endch = getchar())) lf = lf * 10 + (endch & 15);
    if (endch == '.') {
      double digit = 0.1;
      while (isdigit(endch = getchar())) {
        lf += (endch & 15) * digit;
        digit *= 0.1;
      }
    }
    if (flag) lf = -lf;
    return *this;
  }
  template <typename Int>
  Reader& operator>>(Int& d) {
    bool flag = 0;
    endch = getchar();
    while ((!isdigit(endch)) && endch != '-' && endch != EOF) endch = getchar();
    if (endch == '-') flag = 1, endch = getchar();
    d = endch & 15;
    while (isdigit(endch = getchar())) d = (d << 3) + (d << 1) + (endch & 15);
    if (flag) d = -d;
    return *this;
  }
  template <typename Int>
  inline Int get() {
    bool flag = 0;
    endch = getchar();
    while ((!isdigit(endch)) && endch != '-' && endch != EOF) endch = getchar();
    if (endch == '-') flag = 1, endch = getchar();
    Int d = endch & 15;
    while (isdigit(endch = getchar())) d = (d << 3) + (d << 1) + (endch & 15);
    if (flag) d = -d;
    return d;
  }
} read;
struct Writer {
  Writer& operator<<(io_flags f) {
    if (f & char_enter) putchar(10);
    if (f & flush_stdout) fflush(stdout);
    if (f & flush_stderr) fflush(stderr);
    return *this;
  }
  Writer& operator<<(const char* ch) {
    while (*ch) putchar(*(ch++));
    return *this;
  }
  Writer& operator<<(const char ch) {
    putchar(ch);
    return *this;
  }
  template <typename Int>
  Writer& operator<<(Int x) {
    static char buffer[33];
    static int top = 0;
    if (!x) {
      putchar('0');
      return *this;
    }
    if (x < 0) putchar('-'), x = ~x + 1;
    while (x) {
      buffer[++top] = '0' | (x % 10);
      x /= 10;
    }
    while (top) putchar(buffer[top--]);
    return *this;
  }
  inline void operator()(double val, int eps_digit = 6, char endch = '\0',
                         number_type_flags flg = output_double_faster) {
    if (flg & output_double_stable) {
      static char output_format[10];
      sprintf(output_format, "%%.%dlf", eps_digit);
      printf(output_format, val);
    } else if (flg & output_double_faster) {
      if (val < 0) {
        putchar('-');
        val = -val;
      }
      double eps_number = 0.5;
      for (int i = 1; i <= eps_digit; i++) eps_number /= 10;
      val += eps_number;
      (*this) << (long long)val;
      val -= (long long)val;
      putchar('.');
      while (eps_digit--) {
        val *= 10;
        putchar((int)val | '0');
        val -= (int)val;
      }
    } else {
      (*this) << "1.#ERROR_NOT_IDENTIFIED_FLAG";
    }
    if (endch) putchar(endch);
  }
} write;
}  // namespace Fastio
using namespace Fastio;
namespace File_IO {
void init_IO() {
  freopen("Forward, march!.in", "r", stdin);
  freopen("Forward, march!.out", "w", stdout);
}
}  // namespace File_IO
const int N = 2e6 + 7;
int n;
string s;
double f[N][2];
bool check(double dif) {
  f[0][1] = (s[0] == 'L') - dif;
  f[0][0] = (s[0] == 'R') - dif * 2;
  f[0][1] = max(f[0][1], f[0][0] - dif);
  f[0][0] = max(f[0][0], f[0][1] - dif);
  for (int i = 1; i < n; i++) {
    f[i][1] = f[i - 1][0] + (s[i] == 'L') - dif;
    f[i][0] = f[i - 1][1] + (s[i] == 'R') - dif;
    f[i][1] = max(f[i][1], f[i][0] - dif);
    f[i][0] = max(f[i][0], f[i][1] - dif);
  }
  return f[n - 1][0] > 0;
}
signed main() {
  string TmpBuffer;
  cin >> TmpBuffer;
  if (TmpBuffer.front() == TmpBuffer.back() && TmpBuffer.back() == 'R')
    s += 'X';
  for (int i = 0; i < TmpBuffer.size(); i++) {
    s += TmpBuffer[i];
    if (i + 1 < TmpBuffer.size() && TmpBuffer[i] != 'X' &&
        TmpBuffer[i] == TmpBuffer[i + 1])
      s += 'X';
  }
  if (s.front() != 'X' && s.front() == s.back() && s.front() == 'L') s += 'X';
  n = s.size();
  double l = 0, r = 1;
  while (r - l > 1e-9) {
    double mid = (l + r) / 2;
    if (check(mid))
      l = mid;
    else
      r = mid;
  }
  int ans = (l + 1e-9) * 1e8;
  printf("%d.%06d\n", ans / 1000000, ans % 1000000);
  return 0;
}
