#include <bits/stdc++.h>
using namespace std;
void bad(string mes = "Impossible") {
  cout << mes;
  exit(0);
}
template <typename... T>
void shit(T&... x) {}
template <typename... T>
void dec(T&... x) {
  shit(--x...);
}
template <typename... T>
void inc(T&... x) {
  shit(++x...);
}
template <typename T>
string bin(T x, int st = 2) {
  string ans = "";
  while (x > 0) {
    ans += char('0' + x % st);
    x /= st;
  }
  reverse(ans.begin(), ans.end());
  return ans.empty() ? "0" : ans;
}
template <typename T>
T input() {
  T ans = 0, m = 1;
  char c = ' ';
  while (!((c >= '0' && c <= '9') || c == '-')) {
    c = getchar();
  }
  if (c == '-') m = -1, c = getchar();
  while (c >= '0' && c <= '9') {
    ans = ans * 10 + (c - '0'), c = getchar();
  }
  return ans * m;
}
template <typename T>
void read(T& a) {
  a = input<T>();
}
template <typename T>
void read(T& a, T& b) {
  read(a), read(b);
}
template <typename T>
void read(T& a, T& b, T& c) {
  read(a, b), read(c);
}
template <typename T>
void read(T& a, T& b, T& c, T& d) {
  read(a, b), read(c, d);
}
const int inf = 1e9;
const double eps = 1e-9;
const int maxn = 1e5 + 100, base = 1e9 + 7;
const long long llinf = 1e18 + 1;
template <typename T>
T binpow(T n, T second) {
  if (second <= 0) return 1LL;
  if (second % 2 == 0) {
    T b = binpow(n, second / 2);
    return (1LL * b * b) % base;
  } else {
    return (1LL * binpow(n, second - 1) * n) % base;
  }
}
int cnt1, cnt2, cnt3, cnt4;
int main() {
  string second;
  cin >> second;
  if (second.size() % 2) bad("-1");
  for (char c : second) {
    if (c == 'R') cnt1++;
    if (c == 'L') cnt2++;
    if (c == 'U') cnt3++;
    if (c == 'D') cnt4++;
  }
  int ans = 0;
  while (cnt1 - 1 > cnt2) cnt1--, cnt2++, ans++;
  while (cnt2 - 1 > cnt1) cnt1++, cnt2--, ans++;
  while (cnt3 - 1 > cnt4) cnt3--, cnt4++, ans++;
  while (cnt4 - 1 > cnt3) cnt3++, cnt4--, ans++;
  if (cnt1 != cnt2) ans++;
  cout << ans;
  return 0;
}
