//#include <cstdio>
//#include <cstring>
//#include <iostream>
//#include <algorithm>
//#include <hash_map>
//using namespace std;
//typedef long long LL;
//
//const int M = 100005;
//const int INF = 1000000007;
//enum Operate {
//    Add, Delete
//};
//struct Node {
//    int left, right, cnt;
//    LL sum[5];
//} node[M * 6];
//char opt[M][10];
//int val[M], sets[M];
//hash_map<int, int> key;
//
//void Push(int id) {
//    node[id].cnt = node[id<<1].cnt + node[id<<1|1].cnt;
//    int left = node[id<<1].cnt;
//    for (int i = 0; i < 5; i++) {
//        node[id].sum[i] = node[id<<1].sum[i];
//    }
//    for (int i = 0; i < 5; i++) {
//        node[id].sum[(left+i)%5] += node[id<<1|1].sum[i];
//    }
//}
//
//void CreateTree(int L, int R, int id) {
//    node[id].left = L;
//    node[id].right = R;
//    node[id].cnt = 0;
//    for (int i = 0; i < 5; i++) node[id].sum[i] = 0;
//    if (L == R) return;
//    int mid = (L+R)>>1;
//    CreateTree(L, mid, id<<1);
//    CreateTree(mid+1, R, id<<1|1);
//}
//
//void Update(int x, int id, Operate flag) {
//    if (node[id].left == node[id].right) {
//        if (flag == Add) {
//            node[id].cnt = 1;
//            node[id].sum[1] = sets[x-1];
//        } else {
//            node[id].cnt = 0;
//            node[id].sum[1] = 0;
//        }
//        return;
//    }
//    int mid = (node[id].left+node[id].right)>>1;
//    if (x <= mid) {
//        Update(x, id<<1, flag);
//    } else {
//        Update(x, id<<1|1, flag);
//    }
//    Push(id);
//}
//
//int main() {
//    int n;
//    while (~scanf("%d%*c", &n)) {
//        int cnt = 0, idx = 0;
//        key.clear();
//        // 蟆?セ灘?菫晏ュ倩オキ譚・遖サ郤ソ螟?炊
//        for (int i = 0; i < n; i++) {
//            scanf("%s", opt[i]);
//            if (opt[i][0] == 'a' || opt[i][0] == 'd') {
//                scanf("%d", &val[i]);
//                sets[cnt++] = val[i];
//            }
//        }
//        sort(sets, sets+cnt);
//        // unique蜃ス謨ー蟆??螟榊?邏?ク「蛻ー譛ォ蟆セ
//        int length = unique(sets, sets+cnt) - sets;
//        for (int i = 0; i < length; i++)
//            key[sets[i]] = ++idx;  // 遖サ謨」蛹?//        if (idx > 0)
//            CreateTree(1, idx, 1);
//        for (int i = 0; i < n; i++) {
//            if (opt[i][0] == 'a') {
//                Update(key[val[i]], 1, Add);
//            } else if (opt[i][0] == 'd') {
//                Update(key[val[i]], 1, Delete);
//            } else {
//                printf("%I64d\n", node[1].sum[3]);
//            }
//        }
//    }
//    return 0;
//}

#include <cstdio>

int main() {
    int n;
    while (scanf("%d", &n), n) {
        int tot[3] = {0}, ok[3] = {0};
        for (int i = 0; i < n; i++) {
            int hh, mm, MM;
            scanf("%d:%d %d", &hh, &mm, &MM);
            if (MM < mm) {
                MM += 60;
            }
            if (hh >= 11 && hh < 15) {
                tot[0]++;
                if (MM - mm <= 8)
                    ok[0]++;
            } else if (hh >= 18 && hh < 21) {
                tot[1]++;
                if (MM - mm <= 8)
                    ok[1]++;
            } else if ((hh >= 21 && hh < 24) || (hh >= 0 && hh < 2)) {
                tot[2]++;
                if (MM - mm <= 8)
                    ok[2]++;
            }
        }
        if (tot[0] > 0) {
            printf("lunch %d\n", (int)(1.0 * ok[0] / tot[0] * 100));
        } else {
            printf("lunch no guest\n");
        }
        if (tot[1] > 0) {
            printf("dinner %d\n", (int)(1.0 * ok[1] / tot[1] * 100));
        } else {
            printf("dinner no guest\n");
        }
        if (tot[2] > 0) {
            printf("midnight %d\n", (int)(1.0 * ok[2] / tot[2] * 100));
        } else {
            printf("midnight no guest\n");
        }
    }
    return 0;
}

Measured memory_bytes: 1040