use std::fs::File; use std::io::Read; fn main() { let inputstatus = 1; let mut buf = String::new(); let filename = "inputrust.txt"; if inputstatus == 0 { let mut f = File::open(filename).expect("file not found"); f.read_to_string(&mut buf) .expect("something went wrong reading the file"); } else { std::io::stdin().read_to_string(&mut buf).unwrap(); } let s: &str = &buf; let mut s_list: Vec = Vec::new(); let mut i_list: Vec = Vec::new(); let mut n_list: Vec = Vec::new(); let mut g_list: Vec = Vec::new(); for i in 0..s.len() { let c = s.chars().nth(i).unwrap(); if i == 0 { s_list.push(0); i_list.push(0); n_list.push(0); g_list.push(0); } else { s_list.push(s_list[i - 1]); i_list.push(0); n_list.push(0); g_list.push(g_list[i - 1]); } if c == 'S' { s_list[i] += 1; } else if c == 'i' { i_list[i] += s_list[i]; } else if c == 'n' { n_list[i] += i_list[i-1]; } else if c == 'g' { g_list[i] += n_list[i-1]; } } // for v in s_list { // print!("{} ", v); // } // println!("\n"); // for v in i_list { // print!("{} ", v); // } // println!("\n"); // for v in n_list { // print!("{} ", v); // } // println!("\n"); // for v in g_list { // print!("{} ", v); // } // println!("\n"); println!("{}", g_list[s.len() - 1]); }