#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
template <class T>
T _max(T x, T y) {
  return x > y ? x : y;
}
template <class T>
T _min(T x, T y) {
  return x < y ? x : y;
}
template <class T>
T _abs(T x) {
  return (x < 0) ? -x : x;
}
template <class T>
T _mod(T x, T y) {
  return (x > 0) ? x % y : ((x % y) + y) % y;
}
template <class T>
void _swap(T& x, T& y) {
  T t = x;
  x = y;
  y = t;
}
template <class T>
void getmax(T& x, T y) {
  x = (y > x) ? y : x;
}
template <class T>
void getmin(T& x, T y) {
  x = (x < 0 || y < x) ? y : x;
}
int TS, cas = 1;
const int M = 100000 + 5;
int n;
char op[3][111];
bool check(int a, int b, int c) {
  if (op[a][0] == 's' && op[b][0] == 'p' && op[c][0] == 'p') return true;
  if (op[a][0] == 'r' && op[b][0] == 's' && op[c][0] == 's') return true;
  if (op[a][0] == 'p' && op[b][0] == 'r' && op[c][0] == 'r') return true;
  return false;
}
void run() {
  int i, j;
  for (i = 1; i < 3; i++) scanf("%s", op[i]);
  for (i = 0; i < 3; i++) {
    if (check(i, (i + 1) % 3, (i + 2) % 3)) break;
  }
  switch (i) {
    case 0:
      puts("F");
      break;
    case 1:
      puts("M");
      break;
    case 2:
      puts("S");
      break;
    default:
      puts("?");
      break;
  }
}
void preSof() {}
int main() {
  preSof();
  while ((~scanf("%s", op[0]))) run();
  return 0;
}
