Hide

Problem S
IPAM

Languages en is
/problems/ipam/file/statement/is/img-0001.png
Micetro er hugbúnaðurinn sem Eggert og Indriði þróa hjá Men & Mice.

Indriði og Eggert eru sérfræðingar í nafnaþjónum. Þeir skrifuðu hugbúnað saman sem styður umsjón nafnaþjóna. Hugbúnaðurinn getur meira að segja haldið utan um bendilfærslur.

Núna vilja þeir hanna hugbúnað fyrir netkerfaumsjón. Í netkerfum er notast við IP tölur. Kerfisstjórarnir sem stjórna þessum netkerfum vilja flokka IP tölur á marga mismunandi vegu. Til dæmis er frekar algengt að flokka eftir staðsetningu, hvort sem það sé land, borg, heimilisfang, herbergi, eða hnit.

Hugbúnaðurinn þarf því að geta hengt eiginleika við IP tölur. Indriði og Eggert komast að niðurstöðu um hönnun. Þeir eru báðir á leiðinni í langt frí en skilja hönnunarskjalið eftir í hæfu höndunum þínum.

Til að sjá um flokkun er notast við sérsníðanlega eiginleika. Eiginleikar eru hengdir á IP tölur með nafni eiginleikans og gildi eiginleikans.

Notendur skulu hafa aðgang að aðgerð til að skapa skilgreiningu á eiginleika. Þar geta notendur gefið upp nafn eiginleika og einnig sjálfgefið gildi sem fylgir eiginleikanum. Það þýðir að ef ekki hefur verið stillt gildi fyrir þennan eiginleika á IP tölu, mun sjálfgefna gildið vera hengt við hana. Kalla má aftur í þessa aðgerð fyrir skilgreinda eiginleika til að uppfæra sjálfgefna gildið.

Á sama hátt hafa notendur aðgang að aðgerð til að eyða skilgreiningu á eiginleika. Sú aðgerð tekur nafn eiginleika og hreinsar út skilgreininguna á þeim eiginleika. Það verður til þess að allar IP tölur missa eiginleikann með þessu nafni.

Notendur skulu hafa aðgang að aðgerð sem stillir eiginleika á IP tölur. Þar gefur notandi samfellt bil af IP tölum, nafn eiginleika og gildi fyrir eiginleikann. Eiginleikinn er þá stilltur á sérhverri IP tölu innan bilsins.

Notendur skulu hafa aðgang að aðgerð sem sækir eiginleika á IP tölu. Þar geta notendur valið eina IP tölu og fengið alla eiginleika hennar.

Eggert og Indriði koma úr fríinu sínu á morgun. Þess vegna þarft þú að klára útfærsluna fyrir lok vinnudagsins í dag!

Inntak

Fyrsta línan af inntaki inniheldur eina heiltölu $q$, fjölda aðgerða sem verða framkvæmdar.

Næst fylgja $q$ aðgerðir þar sem hver aðgerð er ein lína. Aðgerðirnar eru:

  • Skilgreina, á forminu "+ k v", þar sem k táknar nafn eiginleikans og v táknar sjálfgefna gildið fyrir skilgreininguna.

  • Eyða, á forminu "- k", þar sem k táknar nafn eiginleikans sem skal eyða.

  • Stilla, á forminu "= a b k v", þar sem a og b tákna upphafs og enda IP tölur bilsins, k táknar nafn eiginleikans og v táknar gildi eiginleikans sem skal stilla.

  • Sækja, á forminu "? x", þar sem x táknar IP töluna sem skal sækja allar upplýsingar fyrir.

Þú mátt gera ráð fyrir eftirfarandi:

  • Sérhvert nafn eiginleika er strengur af minnsta lagi $1$ og mesta lagi $10$ enskum bókstöfum, tölustöfum, niðurstrikum og bandstrikum.

  • Sérhvert gildi eiginleika er strengur af minnsta lagi $1$ og mesta lagi $10$ enskum bókstöfum, tölustöfum, niðurstrikum og bandstrikum.

  • Einungis aðgerðir sem búa til skilgreiningar á eiginleikum munu vísa í nafn eiginleika sem er ekki þegar skilgreindur á þeim tímapunkti.

  • Sérhver IP tala er annaðhvort lögleg IPv4 tala eða lögleg IPv6 tala.

Að neðan má sjá frekari útskýringar á formi IP talna.

IPv4

IPv4 tölur samanstanda af fjórum pörtum. Hver partur er ein heiltala á bilinu $0$ til $255$. Partarnir eru aðskildir með punkti.

Dæmi um gildar IPv4 tölur

  • 10.100.80.13

  • 255.255.255.255

  • 255.160.134.0

Dæmi um ógildar IPv4 tölur

  • 300.1.35.28

  • 255.255.255.254.1

  • 127,0,0,1

IPv6

IPv6 tölur samanstanda af átta pörtum. Hver partur er fjögurra stafa sextándakerfistala. Sextándakerfistölur eru táknaðar með tölustöfunum $0$ til $9$ og bókstöfunum $a$ til $f$. Partarnir eru aðskildir með tvípunkti. Í hverjum parti fyrir sig má sleppa að skrifa inn ofauknum núllum framan af tölunni. Ef það eru tveir eða fleiri samliggjandi partar sem innihalda bara $0$ þá er hægt að stytta þá út með því að skrifa tvo tvípunkta í staðinn. Þetta er einungis hægt að gera á einum stað í IP tölunni.

Dæmi um gildar IPv6 tölur eru:

  • ffff:dead:1337:beef:4321:f33d:2f92:3419

  • 2001:db8:0:0:0:ff00:42:8329

  • ::1

  • abcd:1234::bad:dad

Dæmi um ógildar IPv6 tölur eru:

  • 0123:4567:89ab:cdef:ghij:klmn:opqr:stuv

  • ffff:1234::f6b90::abcd

  • 2001:db8:0:0:0:ff00:42:8329:1234

  • 1::3::f

Athugið að IPv4 tölur má einnig rita sem IPv6 tölur. Það er gert með því að breyta pörtum IPv4 tölunnar í sextándakerfið og skrifa partana með ::ffff: sem forskeyti. Til dæmis má skrifa 12.34.56.78 sem ::ffff:c22:384e.

Úttak

Fyrir hverja aðgerð sem sækir eiginleika skaltu skrifa út fyrst eina línu með einni heiltölu $k$, fjölda eiginleika IP tölunnar. Næst skaltu skrifa út $k$ línur, hver þeirra skal lýsa einum eiginleika með nafni og gildi, aðskilin með bili. Skrifa skal út eiginleikana í stafrófsröð út frá nöfnum þeirra. Gefið er að lausnin muni aldrei þurfa prenta meir en $300 \, 000$ eiginleika.

Stigagjöf

Hópur

Stig

Takmarkanir

1

30

$1 \leq q \leq 1\, 000$, einungis IPv4 tölur sem byrja á "10.0.0.".

2

25

$1 \leq q \leq 1\, 000$, einungis IPv4 tölur sem byrja á "10.0.".

3

20

$1 \leq q \leq 1\, 000$, einungis IPv4 tölur sem byrja á "10.".

4

15

$1 \leq q \leq 1\, 000$, einungis IPv4 tölur.

5

10

$1 \leq q \leq 10\, 000$.

Sample Input 1 Sample Output 1
16
+ user System
= 10.0.0.1 10.0.0.1 user Hannes
= 10.0.0.2 10.0.0.2 user Arnar
+ country IS
+ state -
+ city Reykjavik
= 10.0.0.2 10.0.0.3 city Kopavogur
? 10.0.0.2
= 10.0.0.192 10.0.0.254 country US
= 10.0.0.192 10.0.0.224 state Texas
= 10.0.0.192 10.0.0.196 city Waco
= 10.0.0.194 10.0.0.195 user Fredrik
? 10.0.0.195
- state
? 10.0.0.1
? 10.0.0.3
4
city Kopavogur
country IS
state -
user Arnar
4
city Waco
country US
state Texas
user Fredrik
3
city Reykjavik
country IS
user Hannes
3
city Kopavogur
country IS
user System
Sample Input 2 Sample Output 2
6
+ colour red
+ vibe absent
= 10.0.0.92 ::ffff:a00:c0 colour blue
= 1::17 17:: vibe resonant
? 10.0.0.100
? 5::5
2
colour blue
vibe absent
2
colour red
vibe resonant