| use std::collections::HashSet;
 impl Solution {
 fn dfs(set: &mut HashSet<String>, level: usize, tiles: &String,
 cur: &mut String, used: &mut Vec<bool>) {
 let size = tiles.len();
 if size == level {
 return;
 }
 for i in 0..size {
 if used[i] {
 continue;
 }
 used[i] = true;
 let char = tiles.chars().nth(i).unwrap();
 cur.push(char);
 set.insert(cur.clone());
 Self::dfs(set, level + 1, tiles, cur, used);
 used[i] = false;
 cur.pop();
 }
 }
 pub fn num_tile_possibilities(tiles: String) -> i32 {
 let (mut set, input, mut cur, mut used) =
 (HashSet::new(), tiles.clone(), "".to_string(), vec![false; tiles.len()]);
 Self::dfs(&mut set, 0, &input, &mut cur, &mut used);
 return set.len() as i32;
 }
 }
 
 
 |