Досье
Информация о каждом ученике школы представлена в виде: фамилия, имя, класс, дата рождения.
В зависимости от ситуации, необходимо сортировать их в различных порядках. Полный список стандартных порядков следующий:
surname
— по фамилии, игнорируя имя;fullname
— по фамилии, а при совпадении фамилий — по имени;birthyear
— по году рождения, игнорируя день и месяц, от более ранних дат (старших учеников) к более поздним (младшим ученикам);birthdate
— по дате рождения, включая год, от более ранних дат (старших учеников) к более поздним (младшим ученикам);birthday
— по дню рождения, то есть считая равными одинаковые день и месяц разных лет, от 01.01 до 31.12 (в календарном смысле, в форматедд.мм
);grade
— по классу как номеру года обучения, от 1 до 11, игнорируя букву;class
— сначала по классу как номеру года обучения, а при совпадении — по букве класса отA
доZ
.
Иногда необходимо применять несколько порядков: сначала один, при равенстве по первому — второй, и так далее. Например, "birthyear grade surname
" означает, что сначала нужно вывести всех школьников, например, 1998 года рождения, затем всех 1999 года рождения, затем всех 2000 года рождения, и так далее, причем среди школьников одного и того же года рождения проводить сортировку по классам (как годам обучения, игнорируя букву), а уже тех, у кого одинаковы и год рождения, и класс без учета буквы, расположить в алфавитном порядке по фамилиям.
Входные данные
В первой строке записан необходимый порядок сортировки, как одно или несколько из слов surname
, fullname
, birthyear
, birthdate
, birthday
, grade
, class
. Хотя бы одно слово обязательно присутствует; если слов несколько, то они разделены одиночными пробелами; одно и то же слово не может упоминаться более одного раза.
Во второй строке записано количество учеников ().
Далее следуют групп по 4 строки каждая: (1) фамилия — начинается с большой латинской буквы, далее последовательность латинских букв, дефисов, апострофов; (2) имя — начинается с большой латинской буквы, далее последовательность латинских букв, дефисов, апострофов и пробелов; (3) дата рождения (дд.мм.гг
, то есть и день, и месяц, и год всегда заданы ровно двумя цифрами); (4) класс — число от 1 до 11 и одна большая латинская буква, без пробела между ними.
Все даты рождения корректны (например, 30.02 не бывает) и принадлежат диапазону лет от 1990 до 2030. То есть, например, , потому что на самом деле это 1997 и 2002. В основном, ученики старших классов имеют более ранние даты рождения, чем ученики младших, но возможны исключения.
Большинство (не менее 99,9%) фамилий и имен имеют длину до 20 символов, но относительно оставшихся 0,1% гарантировано лишь то, что их суммарная длина не превышает миллион символов. Фамилии и имена гарантированно заканчиваются либо буквой, либо апострофом (но не дефисом и не пробелом).
Фамилии с фамилиями и имена с именами следует сравнивать стандартным для языков программирования регистрозависимым лексикографическим сравнением строк (даже в случае наличия дефисов, пробелов и т.д.).
Выходные данные
Вывести строк, в каждой из которых записаны данные об одном из учеников, в формате: класс, запятая, пробел, фамилия, запятая, пробел, имя, запятая, пробел, дата рождения.
Класс, фамилия, имя и дата рождения должны быть байт-в-байт такими же, как во входных данных.
Строки должны быть упорядочены в соответствии с описанным в первой строке входных данных порядком сортировки.
Во всех случаях, когда применение указанных порядков к указанным данным оставляет возможность различных правильных ответов — выводите любой один из правильных ответов. Например, если при уже упомянутом порядке "birthyear grade surname
" в некотором классе (году обучения) есть однофамильцы одного года рождения — их можно вывести в любом порядке, но надо вывести каждого ровно один раз.
Примеры
birthyear grade surname 8 Gonsales Anna Maria 5A 01.05.03 Ivanov Kyrylo 11A 12.01.97 Ivanov Ivan 3D 20.01.05 Ivanov Andrii 11B 23.12.97 Petrenko Nataliia 11B 23.08.97 Andrijchenko Kateryna 11B 07.02.98 Shevchenko Denys 10A 07.05.98 Smirnov-Kovalenko Yehor 9A 13.11.98
11A, Ivanov, Kyrylo, 12.01.97 11B, Ivanov, Andrii, 23.12.97 11B, Petrenko, Nataliia, 23.08.97 9A, Smirnov-Kovalenko, Yehor, 13.11.98 10A, Shevchenko, Denys, 07.05.98 11B, Andrijchenko, Kateryna, 07.02.98 5A, Gonsales, Anna Maria, 01.05.03 3D, Ivanov, Ivan, 20.01.05
Примечание
Ответ, в котором
Ivanov Andrii
иIvanov Kyrylo
переставлены местами, также является правильным. Других, кроме этих двух, правильных ответов для этих входных данных не существует.Язык C# придерживается несколько иного, чем большинство языков программирования, представления о стандартном регистрозависимом лексикографическом сравнении строк, поэтому вместо очевидного фрагмента
p1.surName.CompareTo(p2.surName)
следует писатьString.Compare(p1.surName, p2.surName, StringComparison.Ordinal)
, и аналогично в остальных случаях, где это важно.