#include <bits/stdc++.h>
using namespace std;
const int mlen = (int)2e6 + 10;
char s0[mlen], s[mlen];
int len0, len;
int Solve(long long Ans) {
  long long f0 = 0, f1 = -(long long)1e18, t0, t1, BONUS = (long long)1e8;
  for (int i = 0; i < (int)(len); i++) {
    if (s[i] == 'X')
      t0 = f1, t1 = f0;
    else if (s[i] == 'L') {
      t0 = max(f1, f0 + BONUS - Ans);
      t1 = max(f0 + BONUS, f1 + BONUS - Ans);
    } else if (s[i] == 'R') {
      t0 = max(f1 + BONUS, f0 + BONUS - Ans);
      t1 = max(f0, f1 + BONUS - Ans);
    } else
      assert(0);
    f0 = t0, f1 = t1;
  }
  return max(f0, f1 - Ans) >= Ans * len;
}
long long Do() {
  long long L = 0, R = (long long)1e8, M;
  while (L < R)
    if (Solve(M = (L + R + 1) / 2))
      L = M;
    else
      R = M - 1;
  return L;
}
int main() {
  gets(s0), len0 = strlen(s0);
  len = 0;
  for (int i = 0; i < (int)(len0); i++) {
    if (i && s0[i] != 'X' && s0[i] == s0[i - 1]) s[len++] = 'X';
    s[len++] = s0[i];
  }
  long long Ans;
  if (s[0] == 'X' || s[0] != s[len - 1])
    Ans = Do();
  else {
    s[len++] = 'X';
    Ans = Do();
    for (int i = len - 1; i > 0; i--) s[i] = s[i - 1];
    s[0] = 'X';
    Ans = max(Ans, Do());
  }
  printf("%.6lf\n", (double)(Ans * 1e-6));
  return 0;
}
