from datetime import datetime, timedelta
for i in range(int(input())):
# ENTRADA DE DATOS
datos = input().split(',')
# VARIABLES AUXILIARES
nombre = datos[0]
asesinatos = int(datos[1])
f = [] # Fechas
serialP = True
# PROCESAMIENTO DE DATOS
for j in range(asesinatos):
f.append(input().split('-'))
dia_1 = int(f[0][2]) # Fecha de primer asesinato (día)
# Verificamos si siempre ataca en la misma fecha (día)
contador = 0
for fecha in f:
if int(fecha[2]) == dia_1:
contador += 1
if contador == asesinatos:
serialP = False
# ¿Qué pasa si ataca los últimos días de febrero y hay un año bisiesto?
# Verificamos si siempre ataca los últimos días de febrero
contador = 0 # Reiniciamos el contador
for fecha in f:
if (fecha[1] == "02") and (fecha[2] == "28" or fecha[2] == "29"):
contador += 1
if contador == asesinatos:
serialP = False
# Si no ataca en la misma fecha:
frecuencia = (datetime(int(f[1][0]), int(f[1][1]), int(f[1][2])) - datetime(int(f[0][0]), int(f[0][1]), int(f[0][2]))).days
aux = len(f) - 1
ultimo_asesinato = datetime(int(f[aux][0]), int(f[aux][1]), int(f[aux][2]))
proximo_asesinato = ultimo_asesinato + timedelta(days = frecuencia)
if serialP == False:
print(nombre, "no es asesino(a) serial periodico")
print()
else:
print(nombre, "ataca cada", frecuencia, "dias y volvera a hacerlo en", proximo_asesinato.date())
print()
ZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWVkZWx0YQoKZm9yIGkgaW4gcmFuZ2UoaW50KGlucHV0KCkpKToKICAgICMgRU5UUkFEQSBERSBEQVRPUwogICAgZGF0b3MgPSBpbnB1dCgpLnNwbGl0KCcsJykgIAoKICAgICMgVkFSSUFCTEVTIEFVWElMSUFSRVMKICAgIG5vbWJyZSA9IGRhdG9zWzBdCiAgICBhc2VzaW5hdG9zID0gaW50KGRhdG9zWzFdKQogICAgZiA9IFtdICAjIEZlY2hhcwogICAgc2VyaWFsUCA9IFRydWUKCiAgICAjIFBST0NFU0FNSUVOVE8gREUgREFUT1MKICAgIGZvciBqIGluIHJhbmdlKGFzZXNpbmF0b3MpOgogICAgICAgIGYuYXBwZW5kKGlucHV0KCkuc3BsaXQoJy0nKSkKCiAgICBkaWFfMSA9IGludChmWzBdWzJdKSAgIyBGZWNoYSBkZSBwcmltZXIgYXNlc2luYXRvIChkw61hKQogICAgIyBWZXJpZmljYW1vcyBzaSBzaWVtcHJlIGF0YWNhIGVuIGxhIG1pc21hIGZlY2hhIChkw61hKQogICAgY29udGFkb3IgPSAwCiAgICBmb3IgZmVjaGEgaW4gZjoKICAgICAgICBpZiBpbnQoZmVjaGFbMl0pID09IGRpYV8xOgogICAgICAgICAgICBjb250YWRvciArPSAxCiAgICBpZiBjb250YWRvciA9PSBhc2VzaW5hdG9zOgogICAgICAgIHNlcmlhbFAgPSBGYWxzZQoKICAgICMgwr9RdcOpIHBhc2Egc2kgYXRhY2EgbG9zIMO6bHRpbW9zIGTDrWFzIGRlIGZlYnJlcm8geSBoYXkgdW4gYcOxbyBiaXNpZXN0bz8KICAgICMgVmVyaWZpY2Ftb3Mgc2kgc2llbXByZSBhdGFjYSBsb3Mgw7psdGltb3MgZMOtYXMgZGUgZmVicmVybwogICAgY29udGFkb3IgPSAwICAjIFJlaW5pY2lhbW9zIGVsIGNvbnRhZG9yCiAgICBmb3IgZmVjaGEgaW4gZjoKICAgICAgICBpZiAgKGZlY2hhWzFdID09ICIwMiIpIGFuZCAoZmVjaGFbMl0gPT0gIjI4IiBvciBmZWNoYVsyXSA9PSAiMjkiKToKICAgICAgICAgICAgY29udGFkb3IgKz0gMQogICAgaWYgY29udGFkb3IgPT0gYXNlc2luYXRvczoKICAgICAgICBzZXJpYWxQID0gRmFsc2UKICAgIAogICAgIyBTaSBubyBhdGFjYSBlbiBsYSBtaXNtYSBmZWNoYToKICAgIGZyZWN1ZW5jaWEgPSAoZGF0ZXRpbWUoaW50KGZbMV1bMF0pLCBpbnQoZlsxXVsxXSksIGludChmWzFdWzJdKSkgLSBkYXRldGltZShpbnQoZlswXVswXSksIGludChmWzBdWzFdKSwgaW50KGZbMF1bMl0pKSkuZGF5cwoKICAgIGF1eCA9IGxlbihmKSAtIDEKICAgIHVsdGltb19hc2VzaW5hdG8gPSBkYXRldGltZShpbnQoZlthdXhdWzBdKSwgaW50KGZbYXV4XVsxXSksIGludChmW2F1eF1bMl0pKQoKICAgIHByb3hpbW9fYXNlc2luYXRvID0gdWx0aW1vX2FzZXNpbmF0byArIHRpbWVkZWx0YShkYXlzID0gZnJlY3VlbmNpYSkKCiAgICBpZiBzZXJpYWxQID09IEZhbHNlOgogICAgICAgIHByaW50KG5vbWJyZSwgIm5vIGVzIGFzZXNpbm8oYSkgc2VyaWFsIHBlcmlvZGljbyIpCiAgICAgICAgcHJpbnQoKQogICAgZWxzZToKICAgICAgICBwcmludChub21icmUsICJhdGFjYSBjYWRhIiwgZnJlY3VlbmNpYSwgImRpYXMgeSB2b2x2ZXJhIGEgaGFjZXJsbyBlbiIsIHByb3hpbW9fYXNlc2luYXRvLmRhdGUoKSkKICAgICAgICBwcmludCgp