#include <set>#include <vector>#include <cstdio>#include <utility>#include <algorithm>using namespace std;typedef pair<int, int> Point;typedef pair<Point, Point> Line;const int mask[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};Line line1(int x, int y, int dx, int dy){ return make_pair(make_pair(x, y), make_pair(x + dx, y + dy));}Line line2(int x, int y, int dx, int dy){ return make_pair(make_pair(x + dx, y + dy), make_pair(x, y));}int judge(const set<Line>& st, const int l){ int m = 0; if (st.count(line1(0, 0, 0, 1)) || st.count(line2(0, 0, 0, 1))) m |= 1; if (st.count(line1(0, 0, 1, 0)) || st.count(line2(0, 0, 1, 0))) m |= 2; if (st.count(line1(l, 0, 1, 0)) || st.count(line2(l, 0, 1, 0))) m |= 4; if (st.count(line1(2 * l, 0, 0, 1)) || st.count(line2(2 * l, 0, 0, 1))) m |= 8; if (st.count(line1(l, l, 1, 0)) || st.count(line2(l, l, 1, 0))) m |= 16; if (st.count(line1(0, l, 1, 0)) || st.count(line2(0, l, 1, 0))) m |= 32; if (st.count(line1(l, 0, 0, 1)) || st.count(line2(l, 0, 0, 1))) m |= 64; for (int i = 0; i < 10; i++) { if (mask[i] == m) { return i; } } return -1;}char buf[128];int main(void){ while (scanf("%s", buf) != EOF) { bool flag; Point p, pp; vector<Point> vp; vector<Line> vl; flag = true; p = make_pair(0, 0); for (int i = 0; buf[i]; i++) { if (buf[i] == 'u' || buf[i] == 'd') { flag = (buf[i] == 'd'); continue; } pp = p; switch(buf[i]) { case 'U': --pp.first; break; case 'D': ++pp.first; break; case 'L': ++pp.second; break; case 'R': --pp.second; break; } if (flag) { vl.push_back(make_pair(p, pp)); vp.push_back(p); vp.push_back(pp); } p = pp; } int x = vp[0].first, y = vp[0].second, l = 0; for (size_t i = 0; i < vp.size(); i++) { x = min(x, vp[i].first); y = min(y, vp[i].second); } for (size_t i = 0; i < vp.size(); i++) { l = max(l, vp[i].first - x); } l /= 2; set<Line> sl; for (size_t i = 0; i < vl.size(); i++) { vl[i].first.first -= x; vl[i].first.second -= y; vl[i].second.first -= x; vl[i].second.second -= y; sl.insert(vl[i]); } printf("%dn", judge(sl, l)); } return 0;}