#![allow( dead_code, non_snake_case, unused_imports, unused_mut, unused_variables, while_true, unused_assignments, clippy::needless_range_loop, clippy::ptr_arg, clippy::type_complexity, clippy::unnecessary_cast )] use proconio::{ input, marker::{Chars, Usize1 as usize1}, }; use std::collections::{BinaryHeap, HashMap, HashSet, VecDeque}; fn main() { input! { N: usize, K: usize, S: [Chars; N], T: [Chars; N], }; let mut S_sets = vec![vec![]; K]; let mut T_sets = vec![vec![]; K]; for (i, s) in S.iter().cloned().enumerate() { S_sets[i % K].push(s); } for (i, s) in T.iter().cloned().enumerate() { T_sets[i % K].push(s); } let mut ok = true; for i in 0..K { let mut ss = S_sets[i].clone(); let mut ts = T_sets[i].clone(); ss.sort(); ts.sort(); if ss != ts { ok = false; break; } } println!("{}", if ok { "Yes" } else { "No" }); }