Implement an IPv6 address parser/normalizer.
You are given a string s that may represent an IPv6 address using standard notation:
-
Up to 8 groups (“hextets”) separated by
:
-
Each hextet is 1 to 4 hex digits (
0-9
,
a-f
,
A-F
)
-
A single
::
may appear at most once, representing one or more consecutive
0000
hextets (zero-compression)
Task:
-
If
s
is a valid IPv6 address under the rules above, return its fully expanded canonical form: exactly 8 hextets, each as 4 lowercase hex digits, joined by
:
.
-
Otherwise return
"Invalid"
.
Examples:
-
"2001:db8::1"
→
"2001:0db8:0000:0000:0000:0000:0000:0001"
-
"::"
→
"0000:0000:0000:0000:0000:0000:0000:0000"
-
"1:2:3:4:5:6:7:8"
→
"0001:0002:0003:0004:0005:0006:0007:0008"
-
"1::2::3"
→
"Invalid"
(multiple
::
)
-
"1:2:3:4:5:6:7:8:9"
→
"Invalid"
(too many hextets)
Constraints: |s| ≤ 100.