use std::io; use std::str; use std::vec; fn solve(scan: &mut UnsafeScanner) { let sym = ['C', 'M', 'S', 'R', 'o', '.']; let val = [720, 360, 180, 30, 6, 1]; let mut n = scan.token::(); let mut ans: vec::Vec = vec![]; for (s, v) in std::iter::zip(sym, val) { while n >= v { ans.push(s); n -= v; } } for c in ans { print!("{c}"); } println!(); } fn main() { let mut scan = UnsafeScanner::new(io::stdin().lock()); solve(&mut scan); } pub struct UnsafeScanner { reader: R, buf_str: Vec, buf_iter: str::SplitAsciiWhitespace<'static>, } impl UnsafeScanner { pub fn new(reader: R) -> Self { Self { reader, buf_str: vec![], buf_iter: "".split_ascii_whitespace(), } } pub fn token(&mut self) -> T { loop { if let Some(token) = self.buf_iter.next() { return token.parse().ok().expect("Failed parse"); } self.buf_str.clear(); self.reader .read_until(b'\n', &mut self.buf_str) .expect("Failed read"); self.buf_iter = unsafe { let slice = str::from_utf8_unchecked(&self.buf_str); std::mem::transmute(slice.split_ascii_whitespace()) } } } }