string[] innum = Console.ReadLine().Trim().Split(' '); int n = int.Parse(innum[0]); int k = int.Parse(innum[1]); string[] s = new string[n]; for (int i = 0; i < n; i++) { s[i] = Console.ReadLine(); } string[] t = new string[n]; for (int i = 0; i < n; i++) { t[i] = Console.ReadLine(); } // Console.WriteLine("s: " + string.Join(", ", s)); // Console.WriteLine("t: " + string.Join(", ", t)); bool flag_1 = true; bool flag_2 = true; if (n - k < k + 1) { // Console.WriteLine("Flag 2 Checking"); for (int i = n-k; i < k; i++) { if (s[i] != t[i]) { flag_2 = false; break; } } } for (int i = 0; i < k; i++) { List s_l = new List(); List t_l = new List(); s_l.Add(s[i]); t_l.Add(t[i]); int a = 1; while ((a-1)*k + i < n-k && a*k + i < n) { s_l.Add(s[a*k + i]); t_l.Add(t[a*k + i]); a++; } // Console.WriteLine("s_l: " + string.Join(", ", s_l)); // Console.WriteLine("t_l: " + string.Join(", ", t_l)); if (!s_l.OrderBy(x => x).SequenceEqual(t_l.OrderBy(x => x))) { // Console.WriteLine("Flag 1 : false"); flag_1 = false; break; } } if (flag_1 && flag_2) { Console.WriteLine("Yes"); } else { Console.WriteLine("No"); }