TYPES: BEGIN OF t_input,
         row TYPE string,
       END OF t_input.

* Input declaration
DATA: lv_input TYPE TABLE OF t_input,
      wa_input LIKE LINE OF lv_input.

* Assign with the puzzle input.
lv_input = VALUE #(
 ( row = 'eyr:2027 hcl:#602927 hgt:186cm byr:1939 iyr:2019 pid:552194973 ecl:hzl' )
 ( row = 'pid:657988073 eyr:2020 byr:1996 ecl:brn hcl:#866857 iyr:2015 hgt:164cm' )
 ( row = 'hcl:#fffffd byr:1951 cid:321 iyr:2017 eyr:2022 ecl:brn hgt:62in pid:#6ef4e1' )
 ( row = 'eyr:2025 iyr:2011 byr:1980 hcl:#fffffd cid:129 pid:420023864 hgt:150cm ecl:brn' )
 ( row = 'eyr:2029 hcl:#ceb3a1 hgt:187cm byr:1925 ecl:amb pid:223151011 iyr:2016' )
 ( row = 'hcl:#cfa07d ecl:brn eyr:2022 pid:135392110 iyr:2010 hgt:190cm byr:1959' )
 ( row = 'eyr:2024 cid:225 iyr:2018 pid:522856696 byr:1961 hcl:#a97842 ecl:grn' )
 ( row = 'eyr:2024 byr:1964 ecl:brn iyr:1976 hcl:#866857 hgt:190cm pid:562135232' )
 ( row = 'hgt:193cm pid:#6e4342 iyr:2011 byr:1936 cid:296 hcl:z ecl:#3b8ed3 eyr:2022' )
 ( row = 'cid:154 byr:1985 pid:503255860 ecl:gry eyr:2023 hcl:#efcc98 iyr:2014' )
 ( row = 'eyr:2026 iyr:2012 pid:631051435 byr:1986 ecl:amb hgt:154cm hcl:#341e13' )
 ( row = 'hcl:#623a2f pid:318048681 ecl:brn eyr:2035 hgt:155cm cid:179 byr:1984 iyr:2019' )
 ( row = 'iyr:2013 hcl:#733820 eyr:2024 hgt:189cm ecl:amb byr:1969 pid:185953891' )
 ( row = 'hcl:#cfa07d ecl:#38f2a6 iyr:2013 hgt:61cm eyr:2021 byr:2012 pid:33668114' )
 ( row = 'pid:47030948 hcl:4946ca iyr:2019 hgt:189 ecl:#1d136d byr:2013 eyr:2024 cid:51' )
 ( row = 'ecl:grn iyr:2011 hgt:162cm byr:1935 hcl:#c0946f pid:883047970 cid:51 eyr:2020' )
 ( row = 'pid:013760919 iyr:2018 byr:1942 ecl:blu hcl:#623a2f eyr:2020 cid:221 hgt:155cm' )
 ( row = 'hgt:152cm eyr:2030 ecl:amb iyr:1986 hcl:#7d3b0c pid:29797863 byr:2000' )
 ( row = 'hgt:176cm byr:1995 pid:546676799 iyr:2013 ecl:brn hcl:#fffffd eyr:2023' )
 ( row = 'byr:1955 pid:634493767 eyr:2028 iyr:2015 ecl:oth' )
 ( row = 'hcl:#7d3b0c iyr:2020 cid:150 hgt:174cm pid:893757190 eyr:2027 ecl:oth byr:2002' )
 ( row = 'eyr:2029 pid:790648045 byr:1978 iyr:2012 hcl:#efcc98 ecl:blu hgt:66in cid:256' )
 ( row = 'iyr:2020 byr:1945 hgt:155cm cid:209 eyr:2027 hcl:#0eeb2d ecl:hzl pid:048725571' )
 ( row = 'hcl:#cfa07d byr:2000 iyr:2011 pid:381372526 ecl:oth eyr:2023 hgt:162cm' )
 ( row = 'ecl:blu pid:544462408 eyr:2030 hgt:171cm iyr:2018 hcl:#602927 byr:1994' )
 ( row = 'hcl:#733820 iyr:2011 hgt:187cm ecl:hzl pid:533405863 byr:1962 cid:266 eyr:2025' )
 ( row = 'byr:1975 hcl:#b6652a iyr:2019 pid:967013712 eyr:2029 hgt:155cm ecl:oth' )
 ( row = 'iyr:2010 eyr:2022 ecl:amb pid:052112145 byr:1982 hgt:190cm hcl:#b6652a' )
 ( row = 'iyr:2012 hgt:183cm hcl:#b6652a byr:1950 ecl:hzl pid:946714779 eyr:2030' )
 ( row = 'eyr:2027 pid:686010502 cid:103 byr:1993 hcl:#ceb3a1 ecl:gry hgt:70in iyr:2018' )
 ( row = 'hcl:#733820 iyr:2012 hgt:157cm byr:1976 eyr:2030 ecl:gry' )
 ( row = 'ecl:hzl byr:1955 hgt:180cm iyr:2017 eyr:2022 hcl:#6b5442 pid:732940101' )
 ( row = 'cid:299 hgt:188cm byr:1924 ecl:oth pid:905274031 iyr:2010 eyr:2024 hcl:#18171d' )
 ( row = 'eyr:2024 hgt:174cm byr:1999 iyr:2013 pid:021076124 hcl:#7f450a ecl:gry' )
 ( row = 'hcl:#866857 iyr:2016 ecl:oth hgt:176cm byr:1940 pid:398320693 eyr:2026' )
 ( row = 'hgt:172cm eyr:2020 hcl:#733820 iyr:1931 ecl:#a0c290 pid:158cm' )
 ( row = 'ecl:blu iyr:2018 eyr:2025 hcl:#341e13 byr:1990 pid:444561212 hgt:182cm' )
 ( row = 'hcl:#602927 hgt:165cm pid:240732315 ecl:oth eyr:2023 byr:1976' )
 ( row = 'iyr:2016 ecl:brn pid:377612846 eyr:2021 byr:1967 hcl:#733820 hgt:153cm' )
 ( row = 'hgt:187cm iyr:2018 eyr:2030 ecl:blu byr:1925 hcl:#733820 cid:114 pid:207103786' )
 ( row = 'hgt:184cm ecl:blu cid:111 iyr:2018 pid:361909532 eyr:2025' )
 ( row = 'ecl:grn byr:1968 iyr:2019 hgt:184cm pid:381103495 hcl:#7d3b0c eyr:2026' )
 ( row = 'iyr:2019 byr:1945 pid:727826617 hcl:#01adfd eyr:2020 hgt:151cm' )
 ( row = 'cid:280 iyr:2011 hcl:#efcc98 ecl:hzl eyr:2029 byr:1924 hgt:171cm pid:235809608' )
 ( row = 'hcl:#602927 byr:1973 pid:599786261 eyr:2029 hgt:172cm iyr:2010 ecl:gry cid:97' )
 ( row = 'iyr:2017 eyr:2027 pid:768895320 hgt:163cm hcl:#866857 byr:1940 ecl:oth' )
 ( row = 'hgt:178cm hcl:#6b5442 iyr:2013 byr:1959 pid:823221334' )
 ( row = 'iyr:2014 pid:534201972 ecl:hzl hgt:150cm hcl:#da8af3 byr:1945 cid:263 eyr:2024' )
 ( row = 'pid:469575516 hgt:189cm byr:1994 eyr:2025 iyr:2010 ecl:blu hcl:#efcc98 cid:341' )
 ( row = 'cid:167 eyr:2024 byr:1999 pid:797138561 hcl:#888785 hgt:60in iyr:2015' )
 ( row = 'iyr:2014 hcl:#866857 cid:103 pid:909549652 byr:1967 hgt:174cm ecl:amb eyr:2023' )
 ( row = 'pid:813003671 ecl:oth hgt:61in cid:95 iyr:2016 byr:1995 eyr:2027' )
 ( row = 'eyr:2021 hcl:#fffffd pid:000088706 iyr:2014 ecl:blu hgt:166cm byr:1951' )
 ( row = 'cid:287 ecl:grn byr:1941 iyr:2017 hcl:#18171d hgt:162cm pid:511728076 eyr:2022' )
 ( row = 'pid:209898040 byr:1968 eyr:2025 hcl:#18171d ecl:brn iyr:2017 hgt:191cm' )
 ( row = 'byr:1932 hcl:z hgt:190cm cid:201 iyr:2016 pid:#02dfcc ecl:#6b9341 eyr:2004' )
 ( row = 'iyr:2013 hcl:#ceb3a1 hgt:191cm pid:501799813 ecl:hzl byr:1993 eyr:2020' )
 ( row = 'ecl:blu cid:315 pid:897450687 hgt:179cm byr:1984 eyr:2029 iyr:2012 hcl:#a97842' )
 ( row = 'iyr:2011 ecl:gry hcl:#6b5442 pid:299193732 eyr:2020 byr:1945 hgt:190in' )
 ( row = 'hgt:158cm eyr:2022 pid:090738381 byr:1992 iyr:2017 hcl:#fffffd ecl:oth' )
 ( row = 'eyr:2028 cid:92 ecl:amb hcl:#573edf pid:765588435 iyr:2016 hgt:179cm byr:2002' )
 ( row = 'eyr:2025 pid:128081454 hcl:#967d2f hgt:190cm iyr:2015 ecl:oth' )
 ( row = 'hgt:189cm eyr:2025 ecl:gry hcl:#888785 byr:1993 pid:001825574 cid:239 iyr:2019' )
 ( row = 'byr:2013 pid:0758189515 hcl:z eyr:2034 iyr:1971 ecl:gry hgt:100' )
 ( row = 'eyr:2026 byr:1943 hcl:#3638a2 iyr:2011 pid:539139386 hgt:156cm ecl:hzl' )
 ( row = 'eyr:2030 pid:016597738 iyr:2017 hgt:173cm ecl:brn hcl:#733820 byr:1956' )
 ( row = 'eyr:2028 iyr:2018 pid:822607758 hcl:#cfa07d ecl:brn hgt:167cm byr:1974' )
 ( row = 'eyr:2020 byr:1980 hgt:65in iyr:2020 ecl:oth hcl:#efcc98 pid:397182705' )
 ( row = 'iyr:2015 byr:1954 hcl:#ceb3a1 eyr:2024 pid:398087239' )
 ( row = 'cid:256 hcl:234fc4 ecl:zzz hgt:177in eyr:2027 iyr:2015 pid:159cm byr:2022' )
 ( row = 'iyr:2018 cid:209 hcl:#a928b0 byr:1976 ecl:hzl pid:920448637 eyr:2025 hgt:158cm' )
 ( row = 'pid:96925844 iyr:2016 eyr:2030 hcl:#888785 ecl:gry byr:1984 cid:223 hgt:165cm' )
 ( row = 'byr:1964 pid:831479208 hgt:153cm iyr:2014 eyr:2024 ecl:brn hcl:#18171d' )
 ( row = 'iyr:2019 ecl:brn hgt:185cm byr:1958 hcl:#ceb3a1 eyr:2026 pid:827043482' )
 ( row = 'iyr:2020 hgt:67in cid:116 hcl:#733820 ecl:blu pid:426593479 byr:1922 eyr:2026' )
 ( row = 'eyr:2022 hcl:#fffffd cid:330 pid:951768959 byr:1969 iyr:2019 hgt:156cm' )
 ( row = 'eyr:2030 ecl:oth byr:1929 hgt:151cm cid:223 hcl:#111544 pid:083495633 iyr:2019' )
 ( row = 'eyr:2025 iyr:2016 ecl:blu hgt:166cm byr:1967 pid:739606431' )
 ( row = 'eyr:2021 ecl:gry hcl:#ceb3a1 pid:788420638 byr:1922 iyr:2020 hgt:161cm' )
 ( row = 'byr:1956 eyr:2025 hcl:#888785 ecl:oth pid:705051840 hgt:158cm' )
 ( row = 'pid:047851403 byr:1937 hcl:#cfa07d iyr:2015 hgt:192cm eyr:2025' )
 ( row = 'hgt:178cm cid:194 iyr:2019 byr:1923 hcl:#c0946f pid:411527076 ecl:gry eyr:2022' )
 ( row = 'hgt:186cm iyr:2014 byr:1956 eyr:2027 ecl:brn pid:976268893 hcl:#341e13' )
 ( row = 'iyr:2011 cid:81 hcl:#18171d hgt:183cm byr:1958 ecl:brn eyr:2025 pid:389943720' )
 ( row = 'eyr:2028 byr:1972 ecl:amb hcl:#c0946f pid:593351635 hgt:165cm' )
 ( row = 'iyr:2012 byr:1991 ecl:blu hcl:#341e13 hgt:169cm cid:156 pid:599766528' )
 ( row = 'byr:2029 hgt:75cm pid:319443119 iyr:2001 eyr:2020 cid:306 ecl:zzz' )
 ( row = 'hcl:#866857 cid:273 ecl:grn byr:1948 hgt:167cm iyr:2014 pid:256331758 eyr:2021' )
 ( row = 'iyr:2016 eyr:2024 ecl:oth hcl:#733820 byr:1977 pid:423680717 hgt:158cm cid:241' )
 ( row = 'hcl:#341e13 pid:788619400 byr:1954 ecl:hzl cid:153 hgt:185cm eyr:2024 iyr:2017' )
 ( row = 'hcl:#cfa07d ecl:blu hgt:161cm eyr:2026 pid:621023569 byr:1928 iyr:2016' )
 ( row = 'cid:91 byr:2024 hgt:168in iyr:1951 ecl:xry eyr:1979 hcl:aa8fc8 pid:166cm' )
 ( row = 'eyr:2028 cid:155 hgt:159cm byr:1952 pid:875326712 ecl:brn iyr:2012 hcl:#18171d' )
 ( row = 'eyr:2026 hcl:#733820 byr:1990 hgt:163cm ecl:amb iyr:2015 pid:162682954' )
 ( row = 'iyr:2020 pid:936952728 byr:1969 ecl:brn hgt:151cm hcl:#c0946f eyr:2029' )
 ( row = 'hgt:189cm pid:132928469 ecl:amb hcl:#866857 byr:1928 eyr:2026 iyr:2013' )
 ( row = 'ecl:grn pid:185240766 iyr:2012 hgt:190cm byr:1952 hcl:#623a2f eyr:2020' )
 ( row = 'byr:2021 eyr:2026 hgt:67cm ecl:#ef67e5 hcl:z iyr:1935 pid:4900748653 cid:64' )
 ( row = 'hgt:69in hcl:#7d3b0c cid:248 eyr:2022 pid:076116194 byr:1979 ecl:gry iyr:2016' )
 ( row = 'byr:1991 eyr:2021 hgt:180cm iyr:2020 cid:127 ecl:blu hcl:#44e350' )
 ( row = 'byr:1954 hcl:#733820 iyr:2018 pid:002868205 hgt:150cm ecl:brn eyr:2021' )
 ( row = 'pid:524531652 hcl:#623a2f cid:80 ecl:amb iyr:2017 eyr:2020 hgt:170cm byr:1927' )
 ( row = 'pid:424660272 iyr:2018 hcl:#efcc98 eyr:2021 cid:238 hgt:187cm byr:1970 ecl:blu' )
 ( row = 'byr:1923 pid:946014113 cid:273 iyr:2013 hgt:175cm ecl:brn hcl:#602927 eyr:2020' )
 ( row = 'hcl:#6b5442 cid:88 ecl:gry iyr:2012 byr:1929 hgt:71in eyr:2022 pid:581329373' )
 ( row = 'eyr:1960 ecl:oth iyr:2017 pid:022131529 cid:79 hgt:184 byr:2005 hcl:#6b5442' )
 ( row = 'eyr:2030 pid:422677836 iyr:2011 hcl:#fffffd byr:1925 hgt:60in ecl:gry' )
 ( row = 'cid:325 hgt:158cm byr:1971 ecl:hzl pid:517329528 hcl:#18171d eyr:2026 iyr:2011' )
 ( row = 'byr:1937 cid:259 eyr:2030 hgt:176cm ecl:blu pid:321795494 iyr:2017' )
 ( row = 'pid:551525002 ecl:grn eyr:2026 iyr:2013 cid:230 hgt:74in hcl:#cfa07d byr:1954' )
 ( row = 'pid:004366607 hcl:c39522 hgt:66cm ecl:#21a3e9 eyr:2024 cid:139' )
 ( row = 'ecl:xry eyr:2037 byr:2016 iyr:1994 cid:98 pid:522572315 hgt:158cm hcl:0ee9d4' )
 ( row = 'cid:70 eyr:2028 hgt:179cm pid:073189127 ecl:grn iyr:2018 hcl:#142217 byr:1977' )
 ( row = 'pid:045852463 cid:69 iyr:2020 ecl:brn byr:1948 eyr:2020 hgt:64in hcl:#733820' )
 ( row = 'cid:268 byr:1970 eyr:2025 hgt:178cm pid:512594967 iyr:2011 ecl:brn hcl:#733820' )
 ( row = 'eyr:2025 hcl:#18171d iyr:2014 byr:1950 hgt:161cm pid:329927551' )
 ( row = 'byr:1956 eyr:2024 hgt:163cm pid:965746490 hcl:#a97842 ecl:brn cid:100 iyr:2010' )
 ( row = 'cid:112 eyr:2027 pid:864571411 hgt:190cm iyr:2011 byr:1962 ecl:grn hcl:#602927' )
 ( row = 'ecl:gry cid:54 iyr:2011 hcl:#6b5442 byr:1922 eyr:2025 pid:689641249 hgt:159cm' )
 ( row = 'eyr:2028 cid:323 iyr:2020 hgt:158cm ecl:hzl pid:876082513 byr:1941' )
 ( row = 'hcl:#18171d hgt:160cm pid:910116712 ecl:oth iyr:2014 byr:1927 eyr:2023 cid:226' )
 ( row = 'iyr:2030 hcl:#602927 eyr:2030 ecl:grn cid:183 hgt:186cm byr:1963 pid:706533329' )
 ( row = 'cid:279 eyr:2026 iyr:2015 byr:1958 pid:120633047 hgt:150cm ecl:hzl hcl:#866857' )
 ( row = 'iyr:2019 byr:1989 hcl:#733820 ecl:hzl pid:470596304 hgt:187cm eyr:2022' )
 ( row = 'eyr:2027 hcl:#888785 cid:346 iyr:2013 hgt:167cm ecl:hzl byr:1994 pid:528844948' )
 ( row = 'hcl:#fffffd pid:969181309 iyr:2014 hgt:192cm eyr:2025 byr:1970 ecl:amb' )
 ( row = 'eyr:2026 iyr:2012 hcl:#341e13 ecl:oth pid:053348609 byr:1931 hgt:167cm' )
 ( row = 'eyr:2029 ecl:grn pid:030276279 iyr:2013 hgt:182cm hcl:#fffffd byr:1967' )
 ( row = 'byr:1949 eyr:2022 hcl:#ceb3a1 iyr:2016 ecl:oth hgt:177cm cid:224 pid:745439371' )
 ( row = 'iyr:2016 byr:1940 eyr:2028 pid:351021541 hcl:#341e13 ecl:amb hgt:64in' )
 ( row = 'cid:309 hgt:74in pid:698666542 hcl:#866857 ecl:oth byr:1953 iyr:2019 eyr:2021' )
 ( row = 'iyr:2013 byr:1979 eyr:2023 hgt:186cm ecl:brn cid:236 pid:727367898 hcl:#733820' )
 ( row = 'hgt:65cm byr:1956 eyr:2025 pid:371685442 iyr:2016 ecl:oth cid:245 hcl:#623a2f' )
 ( row = 'hgt:155cm ecl:grn hcl:#888785 eyr:2027 iyr:2010 byr:1927 pid:916070590' )
 ( row = 'hgt:179cm ecl:blu hcl:#866857 byr:1993 iyr:2019 cid:332 eyr:2022 pid:354895012' )
 ( row = 'iyr:2029 hgt:69cm hcl:#efcc98 pid:179cm cid:216 byr:2007 ecl:oth eyr:2025' )
 ( row = 'iyr:1988 hgt:187 hcl:z ecl:#30e67c byr:2020 pid:225115160 eyr:2037' )
 ( row = 'eyr:2021 iyr:2011 hgt:188cm ecl:hzl byr:1965 pid:455044780' )
 ( row = 'ecl:gry pid:750994177 byr:2002 iyr:2016 eyr:2023 hgt:61in hcl:#fffffd' )
 ( row = 'iyr:2020 ecl:gry pid:304482618 hcl:#18171d eyr:2027 byr:1955 hgt:177cm' )
 ( row = 'hgt:187cm byr:1981 pid:795201673 eyr:2020 cid:154 hcl:#b6652a iyr:2017 ecl:oth' )
 ( row = 'ecl:gry byr:1954 hgt:151cm iyr:2019 cid:101 eyr:2026 hcl:#cfa07d pid:930011749' )
 ( row = 'ecl:zzz eyr:1955 pid:#d45ed4 cid:338 iyr:2030 hcl:z byr:1999' )
 ( row = 'eyr:2020 pid:861636258 hgt:166cm hcl:#7d3b0c ecl:brn iyr:2018 cid:125 byr:1958' )
 ( row = 'iyr:2014 eyr:2022 hgt:67 hcl:#7d3b0c ecl:brn byr:1935 pid:409864761' )
 ( row = 'hcl:#866857 iyr:2012 cid:94 pid:483584137 byr:2000 ecl:blu hgt:178cm eyr:2022' )
 ( row = 'byr:1946 ecl:hzl iyr:2015 eyr:2028 hgt:184cm hcl:#602927 pid:947292495' )
 ( row = 'byr:1974 cid:96 hgt:59in eyr:2028 pid:358779220 hcl:#6b5442 ecl:gry iyr:2014' )
 ( row = 'hcl:#61154f byr:1932 hgt:167cm ecl:brn cid:126 eyr:2022' )
 ( row = 'ecl:gry iyr:2014 hgt:169cm byr:1926 eyr:2020 hcl:#866857 pid:463772660' )
 ( row = 'pid:654733578 ecl:hzl cid:111 iyr:2010 hcl:#fffffd eyr:2024 hgt:191cm byr:1943' )
 ( row = 'eyr:2021 hgt:74cm hcl:#c0946f iyr:2026 pid:164776417 byr:1977' )
 ( row = 'ecl:#6db74f iyr:1921 pid:442332495 byr:2018 hcl:z cid:101 eyr:1949' )
 ( row = 'cid:332 byr:2022 ecl:blu eyr:2038 iyr:1939 hcl:518816 hgt:191cm pid:10107923' )
 ( row = 'pid:168853141 iyr:2010 eyr:2021 byr:1996 ecl:hzl hgt:183cm hcl:#733820' )
 ( row = 'hgt:62in pid:556617728 hcl:336a3b eyr:2023 byr:2029 ecl:xry iyr:2016 cid:89' )
 ( row = 'ecl:hzl hcl:#efcc98 iyr:2020 cid:297 hgt:181cm pid:075811396 eyr:2023 byr:1960' )
 ( row = 'eyr:2030 hcl:#602927 ecl:brn iyr:2015 hgt:75in byr:1995' )
 ( row = 'ecl:grn cid:237 hcl:#8936bb hgt:183cm eyr:2028 iyr:2015 byr:1998' )
 ( row = 'pid:550427102 hgt:67in byr:1991 ecl:gry hcl:#efcc98' )
 ( row = 'cid:274 hgt:70cm iyr:2022 eyr:1961 hcl:00f05b byr:1948 ecl:gmt' )
 ( row = 'ecl:blu iyr:2018 hgt:153cm eyr:2020 pid:831302208 byr:1927 hcl:#18171d cid:150' )
 ( row = 'iyr:2018 byr:1973 hcl:#ceb3a1 cid:215 hgt:192cm pid:770473271 eyr:2027 ecl:blu' )
 ( row = 'iyr:2019 eyr:2021 hcl:#623a2f ecl:hzl hgt:174cm byr:1962 pid:589533254' )
 ( row = 'iyr:2012 ecl:hzl hgt:184cm cid:292 byr:1991 pid:677889195 hcl:#a97842' )
 ( row = 'iyr:2010 pid:#4f47c3 hgt:154in cid:69 hcl:z byr:2022 ecl:#e36a65' )
 ( row = 'ecl:#5ff50c pid:499582878 hcl:#b6652a hgt:171cm iyr:2016 byr:1930 eyr:2024' )
 ( row = 'hgt:159cm byr:1936 eyr:2028 hcl:#6b5442 ecl:amb iyr:2015 pid:658019126' )
 ( row = 'byr:1928 pid:599970280 eyr:2026 ecl:grn hgt:158cm hcl:#18171d cid:239 iyr:2013' )
 ( row = 'pid:684820830 hgt:182cm ecl:oth hcl:#c0946f eyr:2023 iyr:2018' )
 ( row = 'iyr:2019 ecl:blu pid:668361647 cid:348 byr:1952 hcl:#602927 eyr:2021 hgt:71in' )
 ( row = 'hgt:165cm ecl:grn eyr:2030 iyr:2010 pid:256350027 hcl:#7d5994 cid:193 byr:1947' )
 ( row = 'hcl:#602927 iyr:2019 ecl:gry eyr:2029 byr:1931 cid:118 hgt:153cm pid:911300650' )
 ( row = 'eyr:2025 hgt:154cm hcl:#866857 iyr:2016 ecl:grn pid:515526226 byr:1936' )
 ( row = 'hcl:#623a2f hgt:160cm iyr:2019 ecl:oth pid:932621460 eyr:2030 byr:1990' )
 ( row = 'hcl:#623a2f ecl:blu eyr:2027 cid:277 pid:662549708 byr:1949 iyr:2016 hgt:176cm' )
 ( row = 'iyr:2010 eyr:2021 byr:1947 pid:223603325 ecl:gry' )
 ( row = 'ecl:gry pid:145738978 eyr:2029 iyr:2020 hcl:#733820 byr:1949 hgt:183cm' )
 ( row = 'hgt:63in eyr:2028 iyr:2011 hcl:#a97842 byr:1941 ecl:gry pid:091089766' )
 ( row = 'hcl:#fffffd cid:275 hgt:157cm eyr:2021 byr:1978 ecl:hzl iyr:2020 pid:242258232' )
 ( row = 'pid:239061408 ecl:oth eyr:2023 iyr:2011 hgt:192cm byr:1949 hcl:#733820 cid:132' )
 ( row = 'byr:1954 hgt:152cm ecl:brn pid:667414305 eyr:2021 cid:282 iyr:2014 hcl:#341e13' )
 ( row = 'iyr:2018 pid:745564182 hgt:186cm eyr:2028 hcl:#7d3b0c byr:1935 ecl:gry' )
 ( row = 'iyr:2014 eyr:2026 hcl:d26483 byr:1972 pid:611712147 hgt:163cm ecl:#57d27c' )
 ( row = 'cid:322 eyr:2025 byr:1937 iyr:2020 ecl:blu hcl:#cfa07d hgt:158cm pid:150255302' )
 ( row = 'eyr:2030 iyr:2011 hcl:#866857 byr:1974 ecl:blu pid:755213661 hgt:155cm cid:116' )
 ( row = 'hcl:#866857 pid:679616797 ecl:gry hgt:166cm byr:1999 iyr:2014 eyr:2025' )
 ( row = 'iyr:2019 hcl:#fffffd hgt:158cm eyr:2028 pid:835993614 byr:1920' )
 ( row = 'ecl:brn pid:742320152 iyr:2013 hgt:151cm eyr:2025 cid:63 byr:1931 hcl:#200aaa' )
 ( row = 'byr:1950 cid:155 ecl:xry hgt:150cm iyr:2014 eyr:2027 hcl:#615954 pid:596469710' )
 ( row = 'byr:1946 hgt:166cm ecl:gry hcl:#18171d cid:261 iyr:2016 pid:267318602 eyr:2021' )
 ( row = 'ecl:gry hgt:185cm iyr:2013 pid:092573029 eyr:2023 byr:1956 hcl:#b6652a' )
 ( row = 'byr:1997 hgt:172cm eyr:2021 iyr:2014 pid:337403043 ecl:blu hcl:#efcc98' )
 ( row = 'hgt:190cm iyr:2015 byr:1949 eyr:2023 pid:230935940' )
 ( row = 'byr:1980 hgt:171cm eyr:2021 pid:9435249395 ecl:oth hcl:#a97842 iyr:2017' )
 ( row = 'byr:2011 hcl:#b6652a eyr:2039 ecl:hzl iyr:1923 hgt:186cm pid:239188418 cid:93' )
 ( row = 'pid:791787662 cid:51 ecl:gry hcl:#602927 hgt:160cm iyr:2020 eyr:2028 byr:1975' )
 ( row = 'ecl:amb pid:720900081 byr:1978 hcl:#a97842 hgt:183cm iyr:2016 eyr:2022' )
 ( row = 'eyr:2027 hgt:157cm pid:628454234 hcl:#18171d ecl:gry iyr:2017 cid:345 byr:1988' )
 ( row = 'byr:1985 pid:996422540 iyr:2013 hgt:66in ecl:grn eyr:2020 hcl:#341e13' )
 ( row = 'eyr:2022 pid:186cm cid:214 iyr:2017 hcl:#866857 ecl:brn byr:1988 hgt:161cm' )
 ( row = 'iyr:2019 eyr:2025 pid:752184592 hgt:154cm byr:1966 hcl:#18171d cid:119 ecl:grn' )
 ( row = 'hcl:#b6652a cid:100 byr:1974 pid:477922277 eyr:2024 ecl:grn iyr:2011 hgt:59in' )
 ( row = 'iyr:2013 ecl:brn hgt:184cm eyr:2023 byr:1969 pid:514127885 hcl:#6b5442' )
 ( row = 'hcl:#cfa07d iyr:2020 byr:1923 ecl:gry hgt:64in eyr:2029 cid:111' )
 ( row = 'byr:1921 hgt:73in pid:971490088 iyr:2016 eyr:2025 hcl:#866857 cid:271 ecl:blu' )
 ( row = 'ecl:oth eyr:2023 iyr:2019 hgt:179cm byr:1953 pid:226869705 hcl:#602927 cid:63' )
 ( row = 'hgt:175cm ecl:hzl iyr:2010 byr:1938 eyr:2021 pid:718683561 hcl:#341e13' )
 ( row = 'iyr:2023 hgt:189in byr:2030 pid:171cm ecl:#447c00 hcl:z eyr:2022' )
 ( row = 'ecl:blu eyr:2026 hgt:191cm iyr:2020 hcl:#888785 pid:128824091 cid:99 byr:1982' )
 ( row = 'eyr:2026 pid:333173949 iyr:2017 ecl:oth byr:1928 hcl:#fffffd hgt:151cm' )
 ( row = 'hcl:#6b5442 ecl:grn byr:1945 pid:888990994 cid:168 eyr:2026 iyr:2016 hgt:158cm' )
 ( row = 'ecl:grn iyr:2013 byr:1931 pid:716975878 hgt:168cm hcl:#cfa07d eyr:2023' )
 ( row = 'pid:815050555 ecl:blu hgt:161cm hcl:#888785 eyr:2025 iyr:2020 byr:1980' )
 ( row = 'pid:470039281 byr:1967 iyr:2017 ecl:gry eyr:2021 hgt:171cm hcl:#7d3b0c' )
 ( row = 'hcl:#bdf8d6 iyr:2018 byr:1954 eyr:2030 ecl:blu hgt:184cm pid:694267794' )
 ( row = 'hcl:#cfa07d byr:1971 ecl:brn iyr:2016 hgt:167cm eyr:2027 pid:237865320' )
 ( row = 'byr:1921 eyr:2028 iyr:2014 pid:186145415 cid:215 ecl:oth hgt:176cm hcl:#a97842' )
 ( row = 'pid:925805272 hcl:#7d3b0c eyr:2030 hgt:65in ecl:blu' )
 ( row = 'byr:1992 cid:278 ecl:oth hgt:65in hcl:#c0946f iyr:2013 pid:092712496 eyr:2024' )
 ( row = 'hgt:151cm iyr:2018 hcl:#18171d byr:1971 pid:599220575 cid:321 eyr:2030 ecl:brn' )
 ( row = 'byr:1956 iyr:2016 hcl:#b6652a pid:109381754 ecl:hzl cid:233' )
 ( row = 'iyr:2015 byr:1988 hcl:#866857 ecl:amb pid:274656754 hgt:152cm eyr:2022' )
 ( row = 'eyr:2028 ecl:amb cid:285 byr:1947 hgt:186cm pid:165847317 hcl:#733820 iyr:2013' )
 ( row = 'hcl:#866857 pid:601229952 eyr:2023 ecl:brn hgt:191cm cid:183' )
 ( row = 'hgt:191cm iyr:2018 hcl:#b50bab byr:1936 eyr:2025 pid:422563929 ecl:oth' )
 ( row = 'ecl:gry eyr:2025 hgt:181cm hcl:#a97842 byr:1971 iyr:2010 pid:267796608' )
 ( row = 'hcl:#0fd3b0 eyr:2030 iyr:2014 ecl:oth pid:606512017 hgt:173cm cid:301 byr:1999' )
 ( row = 'byr:1937 cid:277 pid:148179917 hgt:179cm hcl:#602927 iyr:2018 eyr:2029 ecl:grn' )
 ( row = 'hcl:#7d3b0c byr:1960 ecl:hzl hgt:162cm iyr:2015 pid:014246579 eyr:2023' )
 ( row = 'ecl:blu eyr:2020 iyr:2011 byr:1955 hcl:#777876 hgt:188cm pid:988764375' )
 ( row = 'iyr:2012 ecl:amb hcl:#18171d pid:524961020 byr:1983 hgt:173cm eyr:2028' )
 ( row = 'hgt:153cm hcl:#efcc98 pid:127759635 iyr:2019 byr:1932 ecl:hzl eyr:2020' )
 ( row = 'eyr:2025 pid:421725637 ecl:gry iyr:2013 hcl:#c0946f byr:1971' )
 ( row = 'iyr:2015 pid:654033544 cid:176 hgt:163cm byr:1923 ecl:brn hcl:#866857' )
 ( row = 'hcl:#623a2f byr:2013 hgt:76cm ecl:#5cd4a8 iyr:2007 eyr:2035 cid:128 pid:122621229' )
 ( row = 'hcl:#927794 iyr:2019 byr:1964 hgt:158cm ecl:oth pid:269737193 eyr:2025' )
 ( row = 'iyr:2014 cid:181 ecl:blu byr:1949 hcl:#341e13 eyr:2026 pid:120077363 hgt:174cm' )
 ( row = 'cid:161 eyr:2024 hcl:z pid:638178037 hgt:151cm byr:1920 ecl:oth iyr:2011' )
 ( row = 'ecl:brn eyr:2023 hgt:161cm hcl:#a97842 byr:1977 cid:79 pid:177001463 iyr:2014' )
 ( row = 'byr:1938 eyr:1967 ecl:grn pid:302413712 hcl:#888785 hgt:183cm iyr:2010' )
 ( row = 'hgt:164cm byr:1955 pid:772380994 iyr:2015 hcl:#c0946f eyr:2025 ecl:amb' )
 ( row = 'hcl:#602927 eyr:2021 byr:1924 hgt:171cm cid:161 ecl:amb iyr:2019' )
 ( row = 'hgt:119 hcl:7d1404 eyr:1957 pid:143311761 iyr:2027 byr:1939 ecl:#de1d21' )
 ( row = 'hgt:182cm iyr:2015 ecl:blu cid:205 pid:136552613 hcl:#ceb3a1 byr:1992' )
 ( row = 'ecl:blu iyr:2013 cid:54 byr:1998 hcl:z hgt:172cm eyr:2034 pid:#ec3c3a' )
 ( row = 'byr:1975 ecl:blu eyr:2025 hcl:#623a2f pid:358585328 iyr:2012' )
 ( row = 'pid:282306278 byr:1958 ecl:grn hgt:190cm iyr:2020 hcl:#18171d cid:276 eyr:2024' )
 ( row = 'byr:1955 eyr:2028 iyr:2017 hgt:177cm ecl:grn pid:111002386 hcl:#6b5442' )
 ( row = 'eyr:2026 pid:694088201 hcl:#866857 hgt:169cm byr:1957 ecl:amb iyr:2018 cid:109' )
 ( row = 'hgt:171cm ecl:blu iyr:2013 eyr:2021 hcl:#6b5442 byr:1965 pid:268169550' )
 ( row = 'pid:803092066 eyr:2023 iyr:2010 hcl:#a97842 ecl:grn byr:1956 hgt:191cm cid:173' )
 ( row = 'eyr:2024 iyr:2012 byr:1991 ecl:gry pid:946620993 hgt:190cm hcl:#b6652a cid:181' )
 ( row = 'iyr:2019 hcl:#cfa07d cid:75 hgt:175cm eyr:2022 pid:062548271 ecl:oth' )
 ( row = 'cid:262 byr:1956 iyr:2014 pid:860561420 hcl:#888785 hgt:176cm' )
 ( row = 'hcl:#efcc98 hgt:188cm pid:828180303 iyr:2013 byr:1932 ecl:gry eyr:2028' )
 ( row = 'eyr:2029 hcl:#341e13 byr:1992 ecl:brn iyr:2012 cid:292 pid:644391775 hgt:150cm' )
 ( row = 'ecl:grn hgt:182cm eyr:2026 hcl:#ceb3a1 byr:1982 pid:625704144 iyr:2013' )
 ( row = 'byr:1926 iyr:2013 ecl:brn hcl:#812218 eyr:2025 hgt:150cm pid:610910806' )
 ( row = 'hgt:61in byr:1926 iyr:2017 eyr:2020 ecl:oth hcl:#623a2f pid:347974562' )
 ( row = 'hgt:185cm eyr:2023 ecl:blu byr:1940 pid:123961293 iyr:2014 hcl:#a97842' )
 ( row = 'iyr:2011 byr:1984 hgt:172cm eyr:2020 hcl:#692e6c ecl:grn pid:342962046' )
 ( row = 'ecl:blu hcl:#b08932 pid:343331979 iyr:2019 hgt:193cm byr:1985 cid:269 eyr:2023' )
 ( row = 'hcl:#fffffd ecl:blu pid:483091240 iyr:2011 eyr:2022 byr:1988' )
 ( row = 'iyr:2019 hgt:177cm pid:516533115 cid:294 ecl:amb hcl:#ceb3a1 byr:1922' )
 ( row = 'byr:1965 eyr:2023 hcl:#cfa07d iyr:2013 hgt:193cm ecl:grn pid:931305875' )
 ( row = 'ecl:hzl byr:1944 hgt:164cm hcl:#fffffd iyr:2019 eyr:2029 pid:141532765 cid:209' )
 ( row = 'iyr:2013 hgt:189cm ecl:brn pid:604140631 eyr:2022 hcl:#ceb3a1 byr:1935' )
 ( row = 'ecl:amb hcl:#888785 byr:1959 cid:287 pid:849438430 hgt:152cm eyr:2027 iyr:2020' )
 ( row = 'byr:1988 hcl:#623a2f eyr:2029 ecl:brn iyr:2018 hgt:167cm pid:470443459' )
 ( row = 'cid:276 hcl:#341e13 eyr:2021 iyr:2012 ecl:hzl hgt:175cm byr:2027 pid:271833606' )
 ( row = 'eyr:2027 iyr:2010 pid:970527839 hgt:164cm byr:1974 hcl:#623a2f ecl:amb' )
 ( row = 'eyr:2020 ecl:grn byr:1932 iyr:2013 pid:104193512 hcl:#c0946f' )
 ( row = 'eyr:2030 byr:1982 hgt:65in ecl:blu hcl:#623a2f pid:570953460 iyr:2020' )
 ( row = 'eyr:2020 byr:1922 hcl:#602927 pid:803264417 iyr:2019 ecl:grn hgt:169cm' )
 ( row = 'ecl:amb hcl:#866857 byr:1963 hgt:170cm eyr:2028 pid:762546796 iyr:2017' )
 ( row = 'eyr:2035 pid:54291174 cid:184 iyr:1980 hgt:176cm ecl:gry hcl:#733820 byr:1974' )
 ( row = 'iyr:2013 hcl:#c0946f pid:408646971 hgt:63in cid:84 byr:1951 ecl:amb eyr:2028' )
 ( row = 'eyr:2021 hcl:#6b5442 byr:1994 hgt:170cm ecl:amb pid:348959147 iyr:2013' )
 ( row = 'byr:1957 ecl:hzl hgt:156cm pid:890752588 eyr:2025 hcl:e7c520 cid:199 iyr:2017' )
 ( row = 'hgt:169cm iyr:2016 cid:180 hcl:#733820 eyr:2024 ecl:hzl pid:661114936 byr:1928' )
 ( row = 'iyr:2015 eyr:2020 byr:1941 hgt:179cm pid:148063033 hcl:#6b5442 ecl:brn' )
 ( row = 'iyr:1935 pid:14292032 byr:2020 eyr:1956 ecl:#c9bc33 hgt:59cm hcl:#cfa07d' )
 ( row = 'hgt:165cm iyr:2010 eyr:2023 hcl:#733820 pid:312465756 cid:112 byr:1993 ecl:amb' )
 ( row = 'eyr:2032 ecl:grt iyr:1963 byr:1964 pid:#f5628c hcl:z hgt:111' )
 ( row = 'hgt:169cm iyr:2012 hcl:#623a2f cid:291 ecl:oth pid:809080900 byr:1979 eyr:2023' )
 ( row = 'iyr:2021 eyr:2033 ecl:gmt hgt:59cm byr:1967 pid:2498700612' )
 ( row = 'byr:1953 ecl:oth iyr:2013 hcl:#b6652a pid:442586860' )
 ( row = 'pid:095687847 eyr:2022 hgt:151cm byr:1967 iyr:2017 ecl:oth hcl:#866857' )
 ( row = 'hcl:#866857 pid:983640144 hgt:61cm ecl:hzl byr:1991 iyr:1930 eyr:2024' )
 ( row = 'ecl:oth hcl:#602927 eyr:2025 iyr:2013 hgt:151cm byr:1992 pid:812583062' )
).

* Starting the Task
TYPES: BEGIN OF t_passport_fields,
         byr TYPE string,
         iyr TYPE string,
         eyr TYPE string,
         hgt TYPE string,
         hcl TYPE string,
         ecl TYPE string,
         pid TYPE string,
         cid TYPE string,
       END OF t_passport_fields.

DATA: wa_current   LIKE LINE OF lv_input,
      lv_result    TYPE int8 VALUE 0,
      lv_checklist TYPE TABLE OF t_passport_fields,
      wa_checklist LIKE LINE OF lv_checklist,
      lr_results   TYPE match_result_tab.

LOOP AT lv_input INTO wa_current.
  SPLIT wa_current-row AT ' ' INTO TABLE DATA(lv_fields).

  CLEAR wa_checklist.

  LOOP AT lv_fields INTO DATA(lv_field).
    SPLIT lv_field AT ':' INTO TABLE DATA(lv_attributes).

    READ TABLE lv_attributes INTO DATA(lv_property_name) INDEX 1.
    READ TABLE lv_attributes INTO DATA(lv_property_value) INDEX 2.

    CASE lv_property_name.
      WHEN 'byr'.
        IF strlen( lv_property_value ) EQ 4 AND lv_property_value GE 1920 AND lv_property_value LE 2002.
          wa_checklist-byr = lv_property_value.
        ENDIF.
      WHEN 'iyr'.
        IF strlen( lv_property_value ) EQ 4 AND lv_property_value GE 2010 AND lv_property_value LE 2020.
          wa_checklist-iyr = lv_property_value.
        ENDIF.
      WHEN 'eyr'.
        IF strlen( lv_property_value ) EQ 4 AND lv_property_value GE 2020 AND lv_property_value LE 2030.
          wa_checklist-eyr = lv_property_value.
        ENDIF.
      WHEN 'hgt'.
        " cm
        FIND ALL OCCURRENCES OF 'cm' IN lv_property_value RESULTS lr_results.
        IF lines( lr_results ) EQ 1.
          REPLACE 'cm' WITH '' INTO lv_property_value.
          IF lv_property_value GE 150 AND lv_property_value LE 193.
            wa_checklist-hgt = lv_property_value.
          ENDIF.
        ENDIF.

        " Inches
        FIND ALL OCCURRENCES OF 'in' IN lv_property_value RESULTS lr_results.
        IF lines( lr_results ) EQ 1.
          REPLACE 'in' WITH '' INTO lv_property_value.
          IF lv_property_value GE 59 AND lv_property_value LE 76.
            wa_checklist-hgt = lv_property_value.
          ENDIF.
        ENDIF.
      WHEN 'hcl'.
        DO 7 TIMES.
          TRY.
            DATA(lv_offset) = sy-index - 1.
            DATA(lv_color_part) = lv_property_value+lv_offset(1).
          CATCH CX_SY_RANGE_OUT_OF_BOUNDS.
            EXIT.
          ENDTRY.
          IF sy-index EQ 1.
            IF lv_color_part NE '#'.
              EXIT.
            ENDIF.
          ELSE.
            IF
              lv_color_part EQ 'a' OR
              lv_color_part EQ 'b' OR
              lv_color_part EQ 'c' OR
              lv_color_part EQ 'd' OR
              lv_color_part EQ 'e' OR
              lv_color_part EQ 'f' OR
              lv_color_part GE 0 OR
              lv_color_part LE 9.
            ELSE.
              EXIT.
            ENDIF.
            IF sy-index EQ 7. " If all numbers and letter has been checked above. If it does not reach this line, the value is anyway invalid.
              wa_checklist-hcl = lv_property_value.
            ENDIF.
          ENDIF.
        ENDDO.
      WHEN 'ecl'.
        CASE lv_property_value.
          WHEN 'amb'.
            wa_checklist-ecl = lv_property_value.
          WHEN 'blu'.
            wa_checklist-ecl = lv_property_value.
          WHEN 'brn'.
            wa_checklist-ecl = lv_property_value.
          WHEN 'gry'.
            wa_checklist-ecl = lv_property_value.
          WHEN 'grn'.
            wa_checklist-ecl = lv_property_value.
          WHEN 'hzl'.
            wa_checklist-ecl = lv_property_value.
          WHEN 'oth'.
            wa_checklist-ecl = lv_property_value.
        ENDCASE.
      WHEN 'pid'.
        IF strlen( lv_property_value ) EQ 9.
          wa_checklist-pid = lv_property_value.
        ENDIF.
      WHEN 'cid'.
        wa_checklist-cid = lv_property_value.
    ENDCASE.

  ENDLOOP.

  " Check if all fields has been validated.
  IF
    wa_checklist-byr IS NOT INITIAL AND
    wa_checklist-iyr IS NOT INITIAL AND
    wa_checklist-eyr IS NOT INITIAL AND
    wa_checklist-hgt IS NOT INITIAL AND
    wa_checklist-hcl IS NOT INITIAL AND
    wa_checklist-ecl IS NOT INITIAL AND
    wa_checklist-pid IS NOT INITIAL.
    lv_result = lv_result + 1.
  ENDIF.
ENDLOOP.

WRITE: 'Total valid passports: ' && lv_result.
