rt
void pop(){return;}
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define elif else if
#define endl "\n"
using namespace std;
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return x*f;
}
void write(int x)
{
if(x<0) putchar('-'),x=-x;
if(x>=10) write(x/10);
putchar(x%10+'0');
}
char reserved[30][30]={" "," and "," break "," do "," else "," elseif "," end "," false "," for "," function "," if "," in "," local "," nil "," not "," or "," repeat "," return "," then "," true "," until "," while "};
char symbol[30][30]={" "," +"," -"," *"," /"," %"," ^"," #"," =="," >="," <="," >"," <"," ~="," ("," )"," {"," }"," ["," ]"," ;"," :"," ,"," ..."," .."," ."," ="};
int reserved_len[30]={0,3,5,2,4,6,3,5,3,8,2,2,5,3,3,2,6,6,4,4,5,5},symbol_len[30]={0,1,1,1,1,1,1,1,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,3,2,1,1},len;
char command[101010];
int is_reserved(int vis)
{
for(int i=1;i<=21;i++)
{
for(int j=1;j<=reserved_len[i]+1;j++)
if(command[vis+j-1]!=reserved[i][j]) goto notis_reserved;
cout << "[RESERVED] ";
for(int j=1;j<=reserved_len[i];j++)
cout << reserved[i][j];
cout << endl;
return reserved_len[i]+vis-1;
notis_reserved:
continue;
}
return 0;
}
int is_number(int vis)
{
if(command[vis]=='0'&&(command[vis+1]=='X'||command[vis+1]=='x')){
cout << "[NUMBER] 0" << command[vis+1];
for(int i=vis+2;i<=len;i++)
if((command[i]>='0'&&command[i]<='9')||(command[i]>='a'&&command[i]<='f')||(command[i]>='A'&&command[i]<='F')) cout << command[i];
else{
cout << endl;
return i-1;
}
cout << endl;
return len;
}
elif(command[vis]=='0'){
cout << "[NUMBER] 0\n";
return vis;
}
else{
int float_sum=0;
if((command[vis]>='1'&&command[vis]<='9')||(command[vis]=='.'&&command[vis+1]>='0'&&command[vis+1]<='9')){
cout << "[NUMBER] ";
for(int i=vis;i<=len;i++)
{
if(command[i]=='.')
if(float_sum==1){
cout << endl;
return i-1;
}
else{
float_sum++;
cout << '.';
}
elif(command[i]=='e'){
if(command[i+1]=='+'||command[i+1]=='-'){
cout << 'e' << command[i+1];
i++;
}
else cout << 'e';
float_sum=1;
}
elif(command[i]>='0'&&command[i]<='9') cout << command[i];
else{
cout << endl;
return i-1;
}
}
}
}
return 0;
}
int is_string(int vis)
{
int string_len=vis+1;
if(command[vis]=='"'){
for(int i=vis+1;;string_len++,i++)
if(command[i]=='"'&&command[i-1]!=(char(92)))
goto print_string;
return 0;
}
elif(command[vis]==(char(39))){
for(int i=vis+1;;string_len++,i++)
if(command[i]==(char(39))&&command[i-1]!=(char(92)))
goto print_string;
return 0;
}
else return 0;
print_string:
cout << "[STRING] ";
for(int i=vis;i<=string_len;i++)
cout << command[i];
cout << endl;
return string_len;
}
int is_symbol(int vis)
{
for(int i=1;i<=26;i++)
{
for(int j=1;j<=symbol_len[i];j++)
if(command[vis+j-1]!=symbol[i][j]) goto notis_symbol;
cout << "[SYMBOL] ";
for(int j=1;j<=symbol_len[i];j++)
cout << symbol[i][j];
cout << endl;
return symbol_len[i]+vis-1;
notis_symbol:
continue;
}
return 0;
}
int is_comment(int vis)
{
if(command[vis]=='-'&&command[vis+1]=='-') return len;
else return 0;
}
int is_name(int vis)
{
if(!((command[vis]>='a'&&command[vis]<='z')||(command[vis]>='A'&&command[vis]<='Z'))) return 0;
cout << "[NAME] ";
for(int i=vis;i<=len;i++)
if((command[i]>='a'&&command[i]<='z')||(command[i]>='A'&&command[i]<='Z')||(command[i]>='0'&&command[i]<='9')||(command[i]=='_')) cout << command[i];
else{
cout << endl;
return i-1;
}
return len;
}
signed main()
{
while(gets(command))
{
len=strlen(command);
for(int i=0;i<len;i++)
{
int vis;
// cout << i;
vis=is_reserved(i);
if(vis!=0){i=vis;goto again;}
vis=is_number(i);
if(vis!=0){i=vis;goto again;}
vis=is_string(i);
if(vis!=0){i=vis;goto again;}
vis=is_comment(i);
if(vis!=0){i=vis;goto again;}
vis=is_symbol(i);
if(vis!=0){i=vis;goto again;}
vis=is_name(i);
if(vis!=0){i=vis;goto again;}
again:
continue;
}
cout << "[EOL]\n";
}
return 0;
}