1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using pi = pair<int, int>;
using vpi = vector<pi>;
using vi = vector<int>;
using vll = vector<long long>;
using mpii = map<int, int>;
using mpll = map<ll, ll>;
using db = long double;
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define lb lower_bound
#define ub upper_bound
const int MOD = (int)1e9 + 7;
const db PI = acos((db)-1);
const int dx[4]{1, 0, -1, 0};
const int dy[4]{0, 1, 0, -1};
//pretty printing
template<typename K, typename V>
void printm(const map<K, V> &mp) {
cerr << "{" << endl;
for (auto p : mp) {
cerr << " { " << p.first << " : " << p.second << " }\n";
}
cerr << "}" << endl;
}
template<typename T>
void printv(const vector<T> &v) {
cerr << "[";
for (int i = 0; i < v.size(); i++) {
if (i == v.size() - 1) {
cerr << v[i];
} else {
cerr << v[i] << ", ";
}
}
cerr << "]\n";
}
template<typename T>
void printvv(const vector<vector<T>> &v) {
cerr << "[\n";
for (auto &vec : v) {
cout << " ";
printv(vec);
}
cerr << "]\n";
}
void print() {
cerr << "\n";
}
template<typename T, typename... TS>
void print(T val, TS... vals) {
cerr << val << " ";
print(vals...);
}
/* stuff you should look for:
---------------------------
* special cases (n=1?)
* int overflow, array bounds
* do smth instead of nothing and stay organized
* WRITE STUFF DOWN
* DON'T GET STUCK ON ONE APPROACH
*/
// dddaddd
// abcba
// dcaaacd
void solve() {
int n, m;
cin >> n >> m;
string a, b;
cin >> a >> b;
set<char> st;
string ab = a + b;
vector<int> fq('z' - 'a' + 2);
for(auto ch : ab) {
st.insert(ch);
fq[ch - 'a']++;
}
int even = 0;
int odd = 0;
if ((n + m) % 2 == 0) {
for (auto ch : st) {
even += fq[ch - 'a'] % 2 == 0;
}
cout << (even == st.size() ? "YES" : "NO") << '\n';
} else {
char cho;
for (auto ch : st) {
even += fq[ch - 'a'] % 2 == 0;
if (fq[ch - 'a'] % 2 != 0) {
odd += fq[ch - 'a'] % 2 != 0;
cho = ch;
}
}
if (odd == 1) {
if (n > m) {
cout << (count(all(a), cho) ? "YES" : "NO") << '\n';
} else {
cout << (count(all(b), cho) ? "YES" : "NO") << '\n';
}
} else {
cout << "NO" << '\n';
}
}
}
int main () {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int tt;
cin >> tt;
while(tt--) {
solve();
}
}
|