CSES - Shared codeLink to this code: https://cses.fi/paste/1805a0c3ec21f30498600b/
#include <algorithm>
#include <iomanip>
#include <iostream>
#include <map>
#include <math.h>
#include <numeric>
#include <set>
#include <stack>
#include <string>
#include <unordered_map>
#include <vector>

using namespace std;

#define ll long long int
#define rep(i, n) for(int i=0 ;i<n ;i++)
#define repp( i , begin , end) for(int i=begin ; i<end; i++)
#define take(b) for(int i=0; i<b.size(); i++)cin>>b[i]
#define takepair(a) for(int i=0; i<a.size(); i++)cin>> a[i].first >> a[i].second
#define sort01(a) sort(a.begin(),a.end())
#define sort10(a) sort(a.begin(),a.end(),greater<>())
#define endl "\n"
#define pii pair<int,int>
#define linear_output(a) for(auto i: a) cout<<i<<" ";cout<<endl
#define sorted_count(a,x) (upper_bound(a.begin(), a.end(), x)- lower_bound(a.begin(), a.end(), x))
#define ld long double
#define makep(a, b) make_pair(a, b)

template< typename T>
ll asqrt(T n)
{
	ll l = -1, r = n + 1;
	while (r - l > 1)
	{
		ll m = (r + l) >> 1;

		if (m * m == n)
			return m;

		if (m * m < n)
			l = m;
		else
			r = m;
	}
	return l;
}
template< typename T>
ll Asqrt(T n)
{
	ll l = -1, r = n + 1;
	while (r - l > 1)
	{
		ll m = (r + l) >> 1;

		if (m * m == n)
			return m;

		if (m * m < n)
			l = m;
		else
			r = m;
	}
	return r;
}

const int mode = 1e9 + 7;
const double eps = 1e-5;
#define MAX_N (int)(1e9+1e8)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////SOLUTION//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

int main() {
	/*ios_base::sync_with_stdio(false);
	cin.tie(NULL);*/

	string s;
	cin >> s;


	bool visited[9][9];
	for (int i = 0; i < 8; i++)
		visited[0][i] = true, visited[i][8] = true, visited[8][i + 1] = true, visited[i + 1][0] = true;
	for (int i = 1; i <= 7; i++)
		for (int j = 1; j <= 7; j++)
			visited[i][j] = false;

	pair<int, int> dir[4]{ makep(0, 1), makep(0, -1), makep(-1, 0), makep(1, 0) };

	vector<int> S(s.size());
	for (int i = 0; i < s.size(); i++)
		switch (s[i])
		{
		case 'R':
			S[i] = 0;
			break;
		case 'L':
			S[i] = 1;
			break;
		case 'U':
			S[i] = 2;
			break;
		case 'D':
			S[i] = 3;
			break;
		default:
			S[i] = 4;
			break;
		}

	auto func = [S, dir, &visited](auto func, int row, int col, int i)->int {
		if (visited[row][col])
			return 0;


		if (row == 7 && col == 1)
			if (i >= 48)
				return 1;
			else
				return 0;

		if (!visited[row - 1][col] && !visited[row + 1][col] && visited[row][col - 1] && visited[row][col + 1])
			return 0;
		if (visited[row - 1][col] && visited[row + 1][col] && !visited[row][col - 1] && !visited[row][col + 1])
			return 0;

		visited[row][col] = true;
		if (S[i] < 4) {
			int ret = func(func, row + dir[S[i]].first, col + dir[S[i]].second, i + 1);
			visited[row][col] = false;
			return ret;
		}

		int ret = func(func, row, col + 1, i + 1) + func(func, row, col - 1, i + 1) + func(func, row - 1, col, i + 1) + func(func, row + 1, col, i + 1);
		visited[row][col] = false;
		return ret;
		};

	std::cout << func(func, 1, 1, 0) << endl;
	return 0;
}