using System; using static System.Console; using System.Linq; using System.Collections.Generic; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).ToArray(); static int[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray(); public static void Main() { Solve(); } static void Solve() { var q = NN; var ans = new bool[q]; for (var u = 0; u < q; ++u) { var s = ReadLine(); var t = ReadLine(); ans[u] = Goal(s, t); } WriteLine(string.Join("\n", ans.Select(f => f ? "Yes" : "No"))); } static bool Goal(string s, string t) { if (s.Length == 4) { var nst = $"{s[2]}{s[3]}{s[0]}{s[1]}"; return s == t || nst == t; } var se = new List(); var so = new List(); var te = new List(); var to = new List(); for (var i = 0; i < s.Length; ++i) { if (i % 2 == 0) { se.Add(s[i]); te.Add(t[i]); } else { so.Add(s[i]); to.Add(t[i]); } } se.Sort(); so.Sort(); te.Sort(); to.Sort(); for (var i = 0; i < se.Count; ++i) if (se[i] != te[i]) return false; for (var i = 0; i < so.Count; ++i) if (so[i] != to[i]) return false; for (var i = 0; i + 1 < se.Count; ++i) if (se[i] == se[i + 1]) return true; for (var i = 0; i + 1 < so.Count; ++i) if (so[i] == so[i + 1]) return true; var sef = new AtCoder.FenwickTree(26); var ser = 0L; var tef = new AtCoder.FenwickTree(26); var ter = 0L; for (var i = 0; i < s.Length; i += 2) { ser += sef.Sum(26) - sef.Sum(s[i] - 'a'); sef.Add(s[i] - 'a', 1); ter += tef.Sum(26) - tef.Sum(t[i] - 'a'); tef.Add(t[i] - 'a', 1); } var sof = new AtCoder.FenwickTree(26); var sor = 0L; var tof = new AtCoder.FenwickTree(26); var tor = 0L; for (var i = 1; i < s.Length; i += 2) { sor += sof.Sum(26) - sof.Sum(s[i] - 'a'); sof.Add(s[i] - 'a', 1); tor += tof.Sum(26) - tof.Sum(t[i] - 'a'); tof.Add(t[i] - 'a', 1); } return (ser % 2 == sor % 2) == (ter % 2 == tor % 2); } }