Напрямки
Вам дано рядок довжини , що складається з літер , , , . Кожна літера представляє напрямок руху на координатній площині. Починаючи з точки , ви виконуєте послідовність з кроків, як описано в рядку . Правила руху для кожного напрямку такі:
Якщо , перемістіть з точки в точку .
Якщо , перемістіть з точки в точку .
Якщо , перемістіть з точки в точку .
Якщо , перемістіть з точки в точку .
За одну операцію ви можете змінити будь-який символ у рядку на його протилежний:
, .
Визначте, чи можливо виконати деякі операції (можливо, нуль операцій) перед рухом так, щоб після завершення всіх кроків ви повернулися до початкової точки .
Вхідні дані
Перший рядок містить ціле число — кількість випадків в одному вхідному файлі.
Кожен випадок описується у двох рядках. Перший рядок містить цілі числа .
Другий рядок містить рядок довжини .
Гарантується, що сума по всіх випадках не перевищує .
Вихідні дані
Для кожного випадку виведіть YES
(без лапок), якщо можливо повернутися до після виконання деяких операцій, і NO
(без лапок) в іншому випадку.
Ви можете виводити YES
і NO
в будь-якому регістрі (наприклад, рядки yES
, yes
і Yes
будуть визнані як позитивна відповідь).
Приклади
Примітка
У першому випадку ми можемо за одну операцію змінити рядок на WNSE
. Змоделюємо наші рухи, описані цим рядком:
Після першого кроку ми знаходимося в точці ;
Після другого кроку ми знаходимося в точці ;
Після третього кроку ми знаходимося в точці ;
Після четвертого кроку ми знаходимося в точці .
Отже, ми повернулися до початкової точки.
У третьому випадку ми можемо змінити рядок на EWW
, щоб повернутися до початкової точки.
Можна довести, що у другому та четвертому випадках неможливо змінити рядок так, щоб після завершення всіх кроків ми повернулися до .
Оцінювання
( бали): ;
( бали): ;
( балів): ;
( балів): ;
( балів): ;
( балів): без додаткових обмежень;