from sys import stdin
n: int = int ( stdin.readline ( ) )
letters = set ( "abcdefghijklmnopqrstuvwxyz" ) | set ( "ABCDEFGHIJKLMOPQRSTUVWXYZ" )
numbers = set ( "0123456789" )
chars = letters | numbers | set ( "._" )
for line in stdin:
if line[ -1 ] == "\n " :
line = line[ :-1 ]
email = line
"""
* zawierać dokładnie jeden znak (@)
"""
parts = email .split ( "@" )
if len ( parts) != 2 :
print ( "Nie" )
continue
"""
* można używać małych lub dużych liter języka łacińskiego, cyfr oraz znaki:
- kropka (.)
- podłoga (_)
"""
first, temp = parts
tld = temp.split ( "." ) [ -1 ]
scnd = "." .join ( temp.split ( "." ) [ :-1 ] )
if set ( first) - chars:
print ( "Nie" )
continue
if set ( scnd) - chars:
print ( "Nie" )
continue
"""
* adres e-mail musi mieć format [pierwszy ciąg znaków]@[drugi ciąg znaków].[trzeci ciąg znaków składający się z 2 lub 3 liter] (pierwszy i drugi ciąg znaków musi się składać z n znaków, gdzie n zawiera się w przedziale [1..20],
"""
"""
* [trzeci ciąg znaków składający się z 2 lub 3 liter]
"""
if len ( tld) not in [ 2 , 3 ] :
print ( "Nie" )
continue
if set ( tld) - letters:
print ( "Nie" )
continue
"""
* (pierwszy i drugi ciąg znaków musi się składać z n znaków, gdzie n zawiera się w przedziale [1..20],
"""
if not ( len ( first) >= 1 and len ( first) <= 20 ) :
print ( "Nie" )
continue
if not ( len ( scnd) >= 1 and len ( scnd) <= 20 ) :
print ( "Nie" )
continue
"""
* w mailu może być wiele znaków kropki i każda musi znajdować się między dwoma znakami różnymi niż znak (.) i (@)
"""
if not ( first[ 0 ] != '.' and first[ -1 ] != '.' and '..' not in first) :
print ( "Nie" )
continue
if not ( scnd[ 0 ] != '.' and scnd[ -1 ] != '.' and '..' not in scnd) :
print ( "Nie" )
continue
print ( "Tak" )
ZnJvbSBzeXMgaW1wb3J0IHN0ZGluCgpuOiBpbnQgPSBpbnQoc3RkaW4ucmVhZGxpbmUoKSkKCmxldHRlcnMgPSBzZXQoImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IikgfCBzZXQoIkFCQ0RFRkdISUpLTE1PUFFSU1RVVldYWVoiKQpudW1iZXJzID0gc2V0KCIwMTIzNDU2Nzg5IikKCmNoYXJzID0gbGV0dGVycyB8IG51bWJlcnMgfCBzZXQoIi5fIikKCmZvciBsaW5lIGluIHN0ZGluOgoJaWYgbGluZVstMV0gPT0gIlxuIjoKCQlsaW5lID0gbGluZVs6LTFdCgllbWFpbCA9IGxpbmUKCQoJIiIiCgkqIHphd2llcmHEhyBkb2vFgmFkbmllIGplZGVuIHpuYWsgKEApCgkiIiIKCXBhcnRzID0gZW1haWwuc3BsaXQoIkAiKQoJCglpZiBsZW4ocGFydHMpICE9IDI6CgkJcHJpbnQoIk5pZSIpCgkJY29udGludWUKCQoJIiIiCgkqIG1vxbxuYSB1xbx5d2HEhyBtYcWCeWNoIGx1YiBkdcW8eWNoIGxpdGVyIGrEmXp5a2EgxYJhY2nFhHNraWVnbywgY3lmciBvcmF6IHpuYWtpOgoJCS0ga3JvcGthICguKQoJCS0gcG9kxYJvZ2EgKF8pCgkiIiIKCQoJZmlyc3QsIHRlbXAgPSBwYXJ0cwoJdGxkID0gdGVtcC5zcGxpdCgiLiIpWy0xXQoJc2NuZCA9ICIuIi5qb2luKHRlbXAuc3BsaXQoIi4iKVs6LTFdKQoKCWlmIHNldChmaXJzdCkgLSBjaGFyczoKCQlwcmludCgiTmllIikKCQljb250aW51ZQoJCglpZiBzZXQoc2NuZCkgLSBjaGFyczoKCQlwcmludCgiTmllIikKCQljb250aW51ZQoKCSIiIgoJKiBhZHJlcyBlLW1haWwgbXVzaSBtaWXEhyBmb3JtYXQgW3BpZXJ3c3p5IGNpxIVnIHpuYWvDs3ddQFtkcnVnaSBjacSFZyB6bmFrw7N3XS5bdHJ6ZWNpIGNpxIVnIHpuYWvDs3cgc2vFgmFkYWrEhWN5IHNpxJkgeiAyIGx1YiAzIGxpdGVyXSAocGllcndzenkgaSBkcnVnaSBjacSFZyB6bmFrw7N3IG11c2kgc2nEmSBza8WCYWRhxIcgeiBuIHpuYWvDs3csIGdkemllIG4gemF3aWVyYSBzacSZIHcgcHJ6ZWR6aWFsZSBbMS4uMjBdLAoJIiIiCgkKCSIiIgoJKiBbdHJ6ZWNpIGNpxIVnIHpuYWvDs3cgc2vFgmFkYWrEhWN5IHNpxJkgeiAyIGx1YiAzIGxpdGVyXQoJIiIiCgkKCWlmIGxlbih0bGQpIG5vdCBpbiBbMiwgM106CgkJcHJpbnQoIk5pZSIpCgkJY29udGludWUKCQoJaWYgc2V0KHRsZCkgLSBsZXR0ZXJzOgoJCXByaW50KCJOaWUiKQoJCWNvbnRpbnVlCgoJIiIiCgkqIChwaWVyd3N6eSBpIGRydWdpIGNpxIVnIHpuYWvDs3cgbXVzaSBzacSZIHNrxYJhZGHEhyB6IG4gem5ha8OzdywgZ2R6aWUgbiB6YXdpZXJhIHNpxJkgdyBwcnplZHppYWxlIFsxLi4yMF0sCgkiIiIKCQoJaWYgbm90IChsZW4oZmlyc3QpID49IDEgYW5kIGxlbihmaXJzdCkgPD0gMjApOgoJCXByaW50KCJOaWUiKQoJCWNvbnRpbnVlCgkKCWlmIG5vdCAobGVuKHNjbmQpID49IDEgYW5kIGxlbihzY25kKSA8PSAyMCk6CgkJcHJpbnQoIk5pZSIpCgkJY29udGludWUKCQoJIiIiCgkqIHcgbWFpbHUgbW/FvGUgYnnEhyB3aWVsZSB6bmFrw7N3IGtyb3BraSBpIGthxbxkYSBtdXNpIHpuYWpkb3dhxIcgc2nEmSBtacSZZHp5IGR3b21hIHpuYWthbWkgcsOzxbxueW1pIG5pxbwgem5hayAoLikgaSAoQCkgCgkiIiIKCglpZiBub3QgKGZpcnN0WzBdICE9ICcuJyBhbmQgZmlyc3RbLTFdICE9ICcuJyBhbmQgJy4uJyBub3QgaW4gZmlyc3QpOgoJCXByaW50KCJOaWUiKQoJCWNvbnRpbnVlCgkKCWlmIG5vdCAoc2NuZFswXSAhPSAnLicgYW5kIHNjbmRbLTFdICE9ICcuJyBhbmQgJy4uJyBub3QgaW4gc2NuZCk6CgkJcHJpbnQoIk5pZSIpCgkJY29udGludWUKCQoJCglwcmludCgiVGFrIikKCQ==
stdin
OQphQDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MC5hYmMKCm1hdCBoQGVkdS5wbAphbGdvcnl0bUBlZHUucGwKYWxnb2xpZ2FAYWxnb2xpZ2EuZWR1LnBsCjEyMzRAMTIzLlBMCjEyMzRAMTIzLi5wbApibGVkbnlALm1haWwucGwKLmFAYi5jZApfQF8uX18=
9
a@123456789012345678901234567890.abc
mat h@edu.pl
algorytm@edu.pl
algoliga@algoliga.edu.pl
1234@123.PL
1234@123..pl
bledny@.mail.pl
.a@b.cd
_@_.__