/*************************************************************************
 *                                                                       *
 *                       Pogromcy Algorytmów 2004                        *
 *                                                                       *
 *   Rozwiązanie zadania: Tańce Gordyjskie Krzyśków                      *
 *   Plik:                tan.ml                                         *
 *************************************************************************/


open Big_int;;

let operS (l,m) razy =
    if not (eq_big_int m zero_big_int) then
	(add_big_int l (mult_big_int razy m), m)
    else
	(l,m);;

let operR (l,m) =
    if lt_big_int l zero_big_int then
	(m, minus_big_int l)
    else
	(minus_big_int m, l);;

let reprezentacja s =
    let rec process stan i =
	if i = String.length s then
	    stan
	else
	    let nowyStan = 
		if s.[i] = 'S' then
		    operS stan unit_big_int
		else
		    operR stan
	    in
		process nowyStan (i + 1)
    in
      process (zero_big_int,unit_big_int) 0;;

let rozplacz stan =
    let rec petla (l,m) wynik =
	if eq_big_int l zero_big_int then
	    wynik
	else
	    if (lt_big_int l zero_big_int) && not (eq_big_int m zero_big_int) then
		let calosc = div_big_int (minus_big_int l) m in
		let reszta = mod_big_int (minus_big_int l) m in
		let ilerazy = add_big_int calosc
		    (if eq_big_int reszta zero_big_int then zero_big_int else unit_big_int)
		in
		    petla (operS (l,m) ilerazy) (add_big_int wynik ilerazy)
	    else
		petla (operR (l,m)) (add_big_int wynik unit_big_int)
    in
	petla stan zero_big_int;;

read_line();;
let dane = read_line();;
let start = reprezentacja dane;;
let wynik = rozplacz(start);;
print_string (string_of_big_int wynik);;
print_newline ();;
