Особові справи — 2

Перегляд у форматі PDF

Надіслати розв'язок

Бали: 5,00 (partial)
Time limit: 1.0s
Memory limit: 256M
Input: stdin
Output: stdout

Problem type

Інформація про кожного з учнів школи має вигляд: прізвище, ім'я, клас, дата народження.

В залежності від ситуації, їх буває потрібно сортувати у різних порядках. Повний перелік стандартних порядків такий:

  • 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. Хоча б одне слово обов'язково присутнє; якщо слів декілька, то вони розділені одинарними пробілами; одне й те ж слово не може згадуватися більше одного разу.

У другому рядку записана кількість учнів ~N~ (~2\leqslant N \leqslant 12345~).

Далі йдуть ~N~ груп по 4 рядки кожна: (1) прізвище – починається з великої латинської літери, далі послідовність латинських букв, дефісів, апострофів; (2) ім'я – починається з великої латинської літери, далі послідовність латинських букв, дефісів, апострофів і пробілів; (3) дата народження (дд.мм.рр, тобто і день, і місяць, і рік завжди задані рівно двома цифрами); (4) клас – число від 1 до 11 і одна велика латинська літера, без пробілу між ними.

Всі дати народження правильні (не буває, наприклад, 30.02) і належать діапазону років від 1990 до 2030. Тобто, наприклад, ~97<02~, бо насправді це 1997 і 2002. Здебільшого, учні старших класів мають раніші дати народження, ніж учні молодших, але можливі виключення.

Більшість (не менше 99,9%) прізвищ та імен мають довжину до 20 символів, але щодо решти 0,1% гарантовано лише те, що їх сумарна довжина не перевищує мільйон символів. Прізвища та імена гарантовано закінчуються або літерою, або апострофом (але не дефісом і не пробілом).

Прізвища з прізвищами та імена з іменами слід порівнювати стандартним для мов програмування регістрозалежним лексикографічним порівнянням рядків (навіть у випадку наявності дефісів, пробілів, тощо).

Результати

Вивести ~N~ рядків, у кожному з яких записані дані про одного з учнів, у форматі: клас, кома, пробіл, прізвище, кома, пробіл, ім'я, кома, пробіл, дата народження.

Клас, прізвище, ім'я і дата народження мають бути байт-у-байт такими ж, як у вхідних даних.

Рядки мають бути впорядкованими у відповідності до описаних в першому рядку вхідних даних порядком сортування.

У всіх випадках, коли застосування вказаних порядків до вказаним даних залишає можливість різних правильних відповідей – виводьте будь-яку одну з правильних відповідей. Наприклад, якщо при вже згаданому порядку 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

Примітки

  1. Відповідь, у якій Ivanov Andrii та Ivanov Kyrylo переставлені місцями, також є правильною. Інших, крім цих двох, правильних відповідей для цих вхідних даних не існує.

  2. Мова C# дотримується трохи іншого, чим більшість мов програмування, уявлення про стандартне регістрозалежне лексикографічне порівняння рядків. І тести вже зроблені під уявлення, стандартне для інших мов. Тому, мовою C# замість очевидного фрагмента p1.surName.CompareTo(p2.surName) слід писати String.Compare(p1.surName, p2.surName, StringComparison.Ordinal), та аналогічно в решті випадків, де це важливо.


Коментарі

Please read the guidelines before commenting.


Ще немає коментарів.