#include <bits/stdc++.h>
using namespace std;
char ss[100100];
bool adjective(string s, bool masc) {
  if (masc)
    return (((int)(s).size()) >= 4 &&
            s.substr(((int)(s).size()) - 4, 4) == "lios");
  return (((int)(s).size()) >= 5 &&
          s.substr(((int)(s).size()) - 5, 5) == "liala");
}
bool noun(string s, bool masc) {
  if (masc)
    return (((int)(s).size()) >= 3 &&
            s.substr(((int)(s).size()) - 3, 3) == "etr");
  return (((int)(s).size()) >= 4 &&
          s.substr(((int)(s).size()) - 4, 4) == "etra");
}
bool verb(string s, bool masc) {
  if (masc)
    return (((int)(s).size()) >= 6 &&
            s.substr(((int)(s).size()) - 6, 6) == "initis");
  return (((int)(s).size()) >= 6 &&
          s.substr(((int)(s).size()) - 6, 6) == "inites");
}
bool valid(string s, bool masc) {
  return (adjective(s, masc) || noun(s, masc) || verb(s, masc));
}
bool avalia2(vector<string> &frase, int i, bool masc) {
  if (i == ((int)(frase).size())) return true;
  if (verb(frase[i], masc)) return avalia2(frase, i + 1, masc);
  return false;
}
bool avalia1(vector<string> &frase, int i, bool masc) {
  if (i == ((int)(frase).size())) return false;
  if (adjective(frase[i], masc)) return avalia1(frase, i + 1, masc);
  if (noun(frase[i], masc)) return avalia2(frase, i + 1, masc);
  return false;
}
int main(void) {
  vector<string> frase;
  while (scanf("%s", ss) == 1) frase.push_back((string(ss)));
  bool masc;
  masc = valid(frase[0], true);
  for (int(i) = 0; (i) < ((((int)(frase).size()))); (i)++)
    if (!valid(frase[i], masc)) {
      printf("NO\n");
      return (0);
    }
  if (((int)(frase).size()) == 1) {
    printf("YES\n");
    return (0);
  }
  printf("%s\n", avalia1(frase, 0, masc) ? "YES" : "NO");
  return (0);
}
