Палиндром - это строка, которая читается одинаково как справа налево, так и слева направо.
На вход программы поступает набор больших латинских букв (не обязательно различных). Разрешается переставлять буквы, а также удалять некоторые буквы. Требуется из данных букв по указанным правилам составить палиндром наибольшей длины, а если таких палиндромов несколько, то выбрать первый из них в алфавитном порядке.
В первой строке входных данных содержится число \(N\) (1 <= \(N\) <= 100000). Во второй строке задается последовательность из \(N\) больших латинских букв (буквы записаны без пробелов).
В единственной строке выходных данных выдайте искомый палиндром.
25 баллов — (1 ≤ N ≤ 10) .
25 баллов — (1 ≤ N ≤ 1 000 ) .
50 баллов — полные ограничения.
Примечание
Сложность работы программы должна быть O(n). Использование встроенной сортировки(sort, sorted), алгоритмов сортировки пузырёк/quick sort/merge sort и других запрещено!
3 AAB
ABA
6 QAZQAZ
AQZZQA
6 ABCDEF
A
Учительница математики попросила школьников составить арифметическое выражение так, чтобы его значение было равно данному числу \(N\), и записать его в тетради. В выражении могут быть использованы натуральные числа, не превосходящие \(K\), операции сложения и умножения, а также скобки. Петя очень не любит писать, и хочет придумать выражение, содержащее как можно меньше символов. Напишите программу, которая поможет ему в этом.
В первой строке входных данных содержатся два натуральных числа: \(N\) (1 <= \(N\) <= 10000) - значение выражения и \(K\) (1 <= \(K\) <= 10000) - наибольшее число, которое разрешается использовать в выражении.
В единственной строке выведите выражение с данным значением, записывающееся наименьшим возможным количеством символов. Если решений несколько, выведите любое из них.
При подсчете длины выражения учитываются все символы: цифры, знаки операций, скобки. В приведенных ниже примерах для справки приводится длина получившейся строки. Выводить ее не нужно.
7 3
5 3+1+3
15 20
2 15
176 1
41 (1+1+1+1)*(1+1+1+1)*(1+1+(1+1+1)*(1+1+1))
Вася нарисовал на клетчатой бумаге многоугольник, все стороны которого проходят по линиям сетки. После этого в каждой клетке он написал число, равное количеству сторон данной клетки, которые принадлежат сторонам многоугольника. Затем он стер многоугольник так, что остался листок бумаги, в каждой клетке которого написано число.
Восстановите нарисованный Васей многоугольник.
В первой строке входных данных содержатся два натуральных числа: \(Y\) - количество строк и \(X\) - количество столбцов листа (3 <= \(Y\) <= 1000, 3 <= \(X\) <= 1000). В каждой из следующих \(Y\) строк задается по \(X\) целых неотрицательных чисел, не превосходящих 4. Ни одна из сторон многоугольника не проходит по границе листа бумаги.
Выведите искомый многоугольник в следующем формате.
Выходные данные должны содержать \(Y\) строк по 2\(X\)-1 символов в каждой (по одному символу на клетку и линию между клетками).
В первой строке выведите вертикальные отрезки в верхнем ряду клеток, обозначая их символом | (вертикальная черта - символ с кодом 124) и горизонтальные отрезки, отделяющие первый ряд клеток от следующего, обозначая их символом _ (подчеркивание). Если соответствующий отрезок в данном многоугольнике отсутствует, выведите вместо него символ . (точка). Во второй строке выведите в том же формате вертикальные отрезки во втором ряду и горизонтальные отрезки, отделяющие второй ряд от третьего. И т.д. В каждой строке на нечетных местах могут стоять только символы точка или подчеркивание, на четных местах - символы точка или вертикальная черта.
Гарантируется, что хотя бы одно решение существует. Если решений несколько, выведите любое из них.
4 4 0 0 1 0 0 2 3 1 1 3 2 1 0 1 1 0
...._.. .._|.|. .|_._|. .......