You are given two strings ss and tt both of length nn and both consisting of lowercase Latin letters.

In one move, you can choose any length lenlen from 11 to nn and perform the following operation:

  • Choose any contiguous substring of the string ss of length lenlen and reverse it;
  • at the same time choose any contiguous substring of the string tt of length lenlen and reverse it as well.

Note that during one move you reverse exactly one substring of the string ss and exactly one substring of the string tt.

Also note that borders of substrings you reverse in ss and in tt can be different, the only restriction is that you reverse the substrings of equal length. For example, if len=3len=3 and n=5n=5, you can reverse s[1…3]s[1…3] and t[3…5]t[3…5], s[2…4]s[2…4] and t[2…4]t[2…4], but not s[1…3]s[1…3] and t[1…2]t[1…2].

Your task is to say if it is possible to make strings ss and tt equal after some (possibly, empty) sequence of moves.

You have to answer qq independent test cases.

Input

The first line of the input contains one integer qq (1≤q≤1041≤q≤104) — the number of test cases. Then qq test cases follow.

The first line of the test case contains one integer nn (1≤n≤2⋅1051≤n≤2⋅105) — the length of ss and tt.

The second line of the test case contains one string ss consisting of nn lowercase Latin letters.

The third line of the test case contains one string tt consisting of nn lowercase Latin letters.

It is guaranteed that the sum of nn over all test cases does not exceed 2⋅1052⋅105 (∑n≤2⋅105∑n≤2⋅105).

Output

For each test case, print the answer on it — "YES" (without quotes) if it is possible to make strings ss and tt equal after some (possibly, empty) sequence of moves and "NO" otherwise.

Example
input

Copy
4
4
abcd
abdc
5
ababa
baaba
4
asdf
asdg
4
abcd
badc
output

Copy
NO
YES
NO
YES

大概意思

现在给你两个字符串,你可以进行若干次操作。

每次操作需要在每个字符串都选择出长度为len的一个区间,两个区间位置不一定相同,然后将这个区间的字符都进行翻转。

问你进行若干次操作后,这俩字符串能变成一样的吗?

#include<bits/stdc++.h>
using namespace std;
int n;
string s1,s2,S1,S2;
//前两个满足, 如果两个字符串的逆的奇偶性相同,那么一定是YES
//在判断1和2之后,我们得到的一定是一个排列,问题就变成你可以翻转若干次,两个排列能否相同。
//我们考虑我们同时翻转相同长度的,我们排列的逆一定会发生奇偶性的变化,
//那么如果一开始奇偶性就不同,那么不管怎么翻转,都不会相同。
int Count(string s) {
int num=;
for(int i=; i<s.size(); i++) {
for(int j=; j<i; j++) {
if(s[j]>s[i])
num++;
}
}
return num;
}
void solve() {
cin>>n>>S1>>S2;
s1=S1;
s2=S2;
sort(s1.begin(),s1.end());
sort(s2.begin(),s2.end());
for(int i=; i<n; i++) {
if(s1[i]!=s2[i]) { //如果存在不同字符,那么一定不行
puts("NO");
return;
}
}
for(int i=; i<n; i++) {
if(s1[i]==s1[i-]) {//如果存在相同字符
puts("YES");
return;
}
if(s2[i]==s2[i-]) {
puts("YES");
return;
}
}
if(Count(S1)%==Count(S2)%) {
puts("YES");
} else {
puts("NO");
}
return;
}
int main() {
int t;
scanf("%d",&t);
while(t--)solve();
}

Codeforces Round #598 (Div. 3) F. Equalizing Two Strings的更多相关文章

  1. Codeforces Round #598 (Div. 3) F. Equalizing Two Strings 构造

    F. Equalizing Two Strings You are given two strings s and t both of length n and both consisting of ...

  2. Codeforces Round #485 (Div. 2) F. AND Graph

    Codeforces Round #485 (Div. 2) F. AND Graph 题目连接: http://codeforces.com/contest/987/problem/F Descri ...

  3. Codeforces Round #486 (Div. 3) F. Rain and Umbrellas

    Codeforces Round #486 (Div. 3) F. Rain and Umbrellas 题目连接: http://codeforces.com/group/T0ITBvoeEx/co ...

  4. Codeforces Round #501 (Div. 3) F. Bracket Substring

    题目链接 Codeforces Round #501 (Div. 3) F. Bracket Substring 题解 官方题解 http://codeforces.com/blog/entry/60 ...

  5. Codeforces Round #499 (Div. 1) F. Tree

    Codeforces Round #499 (Div. 1) F. Tree 题目链接 \(\rm CodeForces\):https://codeforces.com/contest/1010/p ...

  6. Codeforces Round #598 (Div. 3)- E. Yet Another Division Into Teams - 动态规划

    Codeforces Round #598 (Div. 3)- E. Yet Another Division Into Teams - 动态规划 [Problem Description] 给你\( ...

  7. 水题 Codeforces Round #302 (Div. 2) A Set of Strings

    题目传送门 /* 题意:一个字符串分割成k段,每段开头字母不相同 水题:记录每个字母出现的次数,每一次分割把首字母的次数降为0,最后一段直接全部输出 */ #include <cstdio> ...

  8. Codeforces Round #598 (Div. 3)

    传送门 A. Payment Without Change 签到. Code /* * Author: heyuhhh * Created Time: 2019/11/4 21:19:19 */ #i ...

  9. 【CF1256】Codeforces Round #598 (Div. 3) 【思维+贪心+DP】

    https://codeforces.com/contest/1256 A:Payment Without Change[思维] 题意:给你a个价值n的物品和b个价值1的物品,问是否存在取物方案使得价 ...

随机推荐

  1. CSS的display显示

    CSS的display显示 1. 行内元素和块级元素关系 块级元素:1.标题标签:h1~h6:2.段落标签:p1~p6:3.div:4.列表:等 行内元素:1.span:2.a:3.img:4.str ...

  2. 51Nod 1182 完美字符串 (贪心)

    约翰认为字符串的完美度等于它里面所有字母的完美度之和.每个字母的完美度可以由你来分配,不同字母的完美度不同,分别对应一个1-26之间的整数. 约翰不在乎字母大小写.(也就是说字母F和f)的完美度相同. ...

  3. C++——流类库与输入/输出

    I/O流的概念 当程序与外界环境进行信息交换时,存在着两个对象,一个是程序中的对象,另一个是文件对象,流是一种抽象,它负责在数据的生产者和数据的消费者之间建立连接,并管理数据的流动.程序建立一个流对象 ...

  4. opencv图像坐标

    原图: 尺寸:240 × 150 灰度化: 1. 程序中输出像素点的灰度值: 2. 用工具取得的灰度值: 按照如下的坐标(图像处理坐标系) 得到的灰度值: (35,82) (82,35) 换算后分别是 ...

  5. centos7中 yum的安装

    自己误将yum卸载, 在重装时由于依赖问题一直报错: error: Failed dependencies:     /usr/bin/python is needed by yum-3.4.3-16 ...

  6. git命令全景图

  7. Paper: ModelarDB

    Problem: how to store and querry massive amounts of high quality sensor data ingested in real-time f ...

  8. 【NOIP2012普及组】质因数分解

    P1075 质因数分解 假期第一天就给一道入门难度的题写题解…… 这道题一开始就被我想复杂了:埃式筛,欧拉筛……然而开一个1e9的数组?不现实. 直到看到题解区的dalao用唯一分解定理: 算术基本定 ...

  9. 《CSS揭秘》》

    1,透明边框 默认状态下,背景会延伸到边框区域的下层.这样就在半透明的黑色边框中透出了这个容器自己的纯白色背景. 谢天谢地,从w3c的背景与边框第三版开始,我们可以通过 background-clip ...

  10. bzoj 4196:[NOI2015] 软件包管理器 (树链剖分)

    第一次做树剖 找同学要了模板 + 各种借鉴 先用dfs在划分轻重链并编号, install的时候就从查询的节点到根寻找标记的点有多少个,再用深度减去标记的点的个数,并把路径上所有点都标记 uninst ...