#include <bits/stdc++.h>
using namespace std;
struct Node {
  int t, p, g, id;
  string name;
  Node(int tt, int pp, int gg) : t(tt), p(pp), g(gg) {}
  Node(int tt, int pp, int gg, int idd, string s)
      : t(tt), p(pp), g(gg), id(idd), name(s) {}
};
bool igual(string s) {
  char c = s[0];
  for (int i = 1; i < s.length(); ++i)
    if (s[i] != c) return false;
  return true;
}
bool pizza(string s) {
  for (int i = 0; i < s.length() - 1; ++i)
    if (s[i] <= s[i + 1]) return false;
  return true;
}
int main() {
  int n, l, mt = -1, mp = -1, mg = -1;
  string name, s, s2;
  cin >> n;
  vector<Node> v;
  for (int i = 0; i < n; ++i) {
    cin >> l >> name;
    int t = 0, p = 0, g = 0;
    for (int j = 0; j < l; ++j) {
      string aux = "";
      cin >> s2;
      for (int k = 0; k < s2.length(); ++k) {
        if (isdigit(s2[k])) aux += s2[k];
      }
      if (igual(aux))
        t++;
      else if (pizza(aux))
        p++;
      else
        g++;
    }
    mt = max(mt, t);
    mp = max(mp, p);
    mg = max(mg, g);
    v.push_back(Node(t, p, g, i, name));
  }
  printf("If you want to call a taxi, you should call: ");
  bool f = true;
  for (int i = 0; i < n; ++i) {
    if (v[i].t == mt) {
      if (!f) printf(", ");
      cout << v[i].name;
      f = false;
    }
  }
  printf(".\nIf you want to order a pizza, you should call: ");
  f = true;
  for (int i = 0; i < n; ++i) {
    if (v[i].p == mp) {
      if (!f) printf(", ");
      cout << v[i].name;
      f = false;
    }
  }
  printf(
      ".\nIf you want to go to a cafe with a wonderful girl, you should "
      "call: ");
  f = true;
  for (int i = 0; i < n; ++i) {
    if (v[i].g == mg) {
      if (!f) printf(", ");
      cout << v[i].name;
      f = false;
    }
  }
  printf(".\n");
  return 0;
}
