#G3007. 身份证信息

身份证信息

题目描述

新学期开学,班主任要从全班同学的身份证号里整理出每个人的生日和性别。

身份证号共 1818 位,从左往右数(第 11 位是最左边那一位):

  • 第 7∼147 \sim 14 位是出生日期,格式为 yyyymmdd,例如 19900307 表示 19901990 年 33 月 77 日;
  • 第 1717 位是一个数字,奇数表示男性,偶数表示女性;
  • 第 1818 位是校验码,可能是数字 0 ~ 9,也可能是大写字母 X。本题不需要用到它。

请你对每个身份证号输出出生日期(格式 yyyy-mm-dd)和性别(男性输出 male,女性输出 female),最后输出年龄最大(出生日期最早)的同学是第几个。如果有几位同学出生日期相同且都是最早的,输出其中编号最小的。

输入格式

第一行一个整数 nn,表示同学人数。

接下来 nn 行,每行一个 1818 位的身份证号。

输出格式

前 nn 行,第 ii 行输出第 ii 位同学的出生日期和性别,中间用一个空格隔开。

第 n+1n + 1 行输出一个整数,表示年龄最大的同学的编号(编号从 11 开始)。

样例 #1

样例输入 #1

5
990105199003071234
99012220070923002X
990303198512310515
990102200102280046
99010719850505473X

样例输出 #1

1990-03-07 male
2007-09-23 female
1985-12-31 male
2001-02-28 female
1985-05-05 male
5

样例解释

以第 11 个号码 990105199003071234 为例:第 7∼147 \sim 14 位是 19900307,第 1717 位是 3,是奇数,所以输出 1990-03-07 male。

第 33 位和第 55 位同学都是 19851985 年出生,第 55 位是 55 月 55 日、比第 33 位的 1212 月 3131 日更早,所以年龄最大的是第 55 位。

(本题所有号码均为虚构,前两位 99 不对应任何真实地区。)

提示

数据范围

  • 对于 40%40\% 的数据:身份证号的第 1818 位都不是 X;
  • 对于 100%100\% 的数据:1≤n≤10001 \le n \le 1000,每个号码都是 1818 位,前 1717 位都是数字,出生日期都是真实存在的日期。

提示

  • s.substr(i, len) 取出字符串 s 从下标 i 开始、长度为 len 的一段。注意 C++ 字符串的下标从 00 开始,题目里的「第 77 位」对应下标 66。
  • 两个长度相同、只由数字组成的字符串,用 < 比较的结果和把它们当作整数比较的结果是一样的。