#include<iostream>
#include<stdio.h>
#include<malloc.h>
using namespace std;
typedef struct product_node
{
int p_id;
int c_id;
int s_id;
int r_id;
struct product_node* next;;
}product_node;
int numberOfDays;
typedef struct day_information
{
int day;
struct product_node *pro;
int nodeCount;
}day_information;
day_information *day_info[105];
day_information *getDayInformationNode(int d)
{
day_information *temp = (day_information*)malloc(sizeof(day_information));
temp->day = d;
temp->nodeCount = 0;
temp->pro = NULL;
return temp;
}
product_node *getProductNode(int p, int c, int s, int r)
{
product_node *temp = (product_node*)malloc(sizeof(product_node));
temp->c_id = c;
temp->p_id = p;
temp->s_id = s;
temp->r_id = r;
temp->next = NULL;
return temp;
}
void init()
{
numberOfDays = 0;
for (int i = 1; i <= 101; i++)
{
day_info[i] = getDayInformationNode(i);
}
}
void add_product_node(int sday, int c, int p, int s, int r)
{
numberOfDays++;
product_node *temp = day_info[sday]->pro;
if (temp == NULL)
{
day_info[sday]->pro = getProductNode(p, c, s, r);
}
else
{
while (temp->next != NULL)
{
temp = temp->next;
}
temp->next = getProductNode(p, c, s, r);
}
day_info[sday]->nodeCount = day_info[sday]->nodeCount + 1;
}
int getResultDaywise(int startDay, int cid, int pid, int rid, int sid)
{
int countp = 0;
product_node *temp = day_info[startDay]->pro;
if (temp == NULL)
return 0;
if (pid > 0 && cid > 0 && rid > 0 && sid > 0)
{
while (temp)
{
if (temp->p_id == pid&&temp->c_id == cid&&temp->r_id == rid&&temp->s_id == sid)
{
countp++;
}
temp = temp->next;
}
return countp;
}
else if (pid > 0 && cid == 0 && sid > 0 && rid > 0)
{
while (temp)
{
if (temp->p_id == pid&&temp->r_id == rid&&temp->s_id == sid)
{
countp++;
}
temp = temp->next;
}
return countp;
}
else if (pid > 0 && cid == 0 && sid > 0 && rid == 0)
{
while (temp)
{
if (temp->p_id == pid&&temp->s_id == sid)
{
countp++;
}
temp = temp->next;
}
return countp;
}
else if (pid > 0 && cid > 0 && sid > 0 && rid == 0)
{
while (temp)
{
if (temp->p_id == pid&&temp->c_id == cid&&temp->s_id == sid)
{
countp++;
}
temp = temp->next;
}
return countp;
}
else if (pid == -1 && sid == -1)
{
return day_info[startDay]->nodeCount;
}
else if (pid == -1 && sid > 0 && rid > 0)
{
while (temp)
{
if (temp->r_id == rid&&temp->s_id == sid)
{
countp++;
}
temp = temp->next;
}
return countp;
}
else if (pid == -1 && sid > 0 && rid == 0)
{
while (temp)
{
if (temp->s_id == sid)
{
countp++;
}
temp = temp->next;
}
return countp;
}
else if (pid > 0 && cid > 0 && sid == -1)
{
while (temp)
{
if (temp->p_id == pid&&temp->c_id == cid)
{
countp++;
}
temp = temp->next;
}
return countp;
}
else if (pid > 0 && cid == 0 && sid == -1)
{
while (temp)
{
if (temp->p_id == pid)
{
countp++;
}
temp = temp->next;
}
return countp;
}
}
int getResult(int startDay, int endDay, int cid, int pid, int rid, int sid)
{
int countp = 0;
if (endDay == 0)
{
return getResultDaywise(startDay, cid, pid, rid, sid);
}
for (int i = startDay; i <= endDay; i++)
{
countp += (getResultDaywise(startDay, cid, pid, rid, sid));
}
return countp;
}
int main()
{
int tc;
cin >> tc;
init();
while (tc--)
{
char c;
int startDay = 0, endDay = 0, pid = 0, cid = 0, sid = 0, rid = 0;
cin >> c;
if (c == 'S')
{
char dot1, dot2;
cin >> startDay >> pid >> dot1;
if (dot1 == '.')
{
cout << ". hai\n";
cin >> cid >> sid >> dot2;
if (dot2 == '.')
cin >> rid;
}
else
{
cout << ". nhi\n";
cin >> sid >> dot2;
if (dot2 == '.')
cin >> rid;
}
printf("%d %d %d %d %d\n", startDay, cid, pid, sid, rid);
add_product_node(startDay, cid, pid, sid, rid);
}
else
{
char dot1, dot2, dot3;
cin >> startDay >> dot1;
if (dot1 == '.')
{
cin >> endDay >> pid >> dot2;
if (dot2 == '.')
{
cin >> cid >> sid >> dot3;
if (dot3 == '.')
cin >> rid;
}
else
{
cin >> sid >> dot3;
if (dot3 == '.')
cin >> rid;
}
}
else
{
cin >> pid >> dot2;
if (dot2 == '.')
{
cin >> cid >> sid >> dot3;
if (dot3 == '.')
cin >> rid;
}
else
{
cin >> sid >> dot3;
if (dot3 == '.')
cin >> rid;
}
}
printf("%d %d %d %d %d %d\n", startDay, endDay, cid, pid, sid, rid);
int res = getResult(startDay, endDay, cid, pid, rid, sid);
cout << res << endl;
}
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHN0ZGlvLmg+CiNpbmNsdWRlPG1hbGxvYy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0eXBlZGVmIHN0cnVjdCBwcm9kdWN0X25vZGUKewoJaW50IHBfaWQ7CglpbnQgY19pZDsKCWludCBzX2lkOwoJaW50IHJfaWQ7CglzdHJ1Y3QgcHJvZHVjdF9ub2RlKiBuZXh0OzsKfXByb2R1Y3Rfbm9kZTsKaW50IG51bWJlck9mRGF5czsKdHlwZWRlZiBzdHJ1Y3QgZGF5X2luZm9ybWF0aW9uCnsKCWludCBkYXk7CglzdHJ1Y3QgcHJvZHVjdF9ub2RlICpwcm87CglpbnQgbm9kZUNvdW50Owp9ZGF5X2luZm9ybWF0aW9uOwpkYXlfaW5mb3JtYXRpb24gKmRheV9pbmZvWzEwNV07CmRheV9pbmZvcm1hdGlvbiAqZ2V0RGF5SW5mb3JtYXRpb25Ob2RlKGludCBkKQp7CglkYXlfaW5mb3JtYXRpb24gKnRlbXAgPSAoZGF5X2luZm9ybWF0aW9uKiltYWxsb2Moc2l6ZW9mKGRheV9pbmZvcm1hdGlvbikpOwoJdGVtcC0+ZGF5ID0gZDsKCXRlbXAtPm5vZGVDb3VudCA9IDA7Cgl0ZW1wLT5wcm8gPSBOVUxMOwoJcmV0dXJuIHRlbXA7Cn0KcHJvZHVjdF9ub2RlICpnZXRQcm9kdWN0Tm9kZShpbnQgcCwgaW50IGMsIGludCBzLCBpbnQgcikKewoJcHJvZHVjdF9ub2RlICp0ZW1wID0gKHByb2R1Y3Rfbm9kZSopbWFsbG9jKHNpemVvZihwcm9kdWN0X25vZGUpKTsKCXRlbXAtPmNfaWQgPSBjOwoJdGVtcC0+cF9pZCA9IHA7Cgl0ZW1wLT5zX2lkID0gczsKCXRlbXAtPnJfaWQgPSByOwoJdGVtcC0+bmV4dCA9IE5VTEw7CglyZXR1cm4gdGVtcDsKCn0Kdm9pZCBpbml0KCkKewoJbnVtYmVyT2ZEYXlzID0gMDsKCWZvciAoaW50IGkgPSAxOyBpIDw9IDEwMTsgaSsrKQoJewoJCWRheV9pbmZvW2ldID0gZ2V0RGF5SW5mb3JtYXRpb25Ob2RlKGkpOwoKCX0KfQp2b2lkIGFkZF9wcm9kdWN0X25vZGUoaW50IHNkYXksIGludCBjLCBpbnQgcCwgaW50IHMsIGludCByKQp7CgludW1iZXJPZkRheXMrKzsKCXByb2R1Y3Rfbm9kZSAqdGVtcCA9IGRheV9pbmZvW3NkYXldLT5wcm87CglpZiAodGVtcCA9PSBOVUxMKQoJewoJCWRheV9pbmZvW3NkYXldLT5wcm8gPSBnZXRQcm9kdWN0Tm9kZShwLCBjLCBzLCByKTsKCgl9CgllbHNlCgl7CgkJd2hpbGUgKHRlbXAtPm5leHQgIT0gTlVMTCkKCQl7CgkJCXRlbXAgPSB0ZW1wLT5uZXh0OwoJCX0KCQl0ZW1wLT5uZXh0ID0gZ2V0UHJvZHVjdE5vZGUocCwgYywgcywgcik7Cgl9CglkYXlfaW5mb1tzZGF5XS0+bm9kZUNvdW50ID0gZGF5X2luZm9bc2RheV0tPm5vZGVDb3VudCArIDE7Cgp9CgppbnQgZ2V0UmVzdWx0RGF5d2lzZShpbnQgc3RhcnREYXksIGludCBjaWQsIGludCBwaWQsIGludCByaWQsIGludCBzaWQpCnsKCWludCBjb3VudHAgPSAwOwoJcHJvZHVjdF9ub2RlICp0ZW1wID0gZGF5X2luZm9bc3RhcnREYXldLT5wcm87CglpZiAodGVtcCA9PSBOVUxMKQoJCXJldHVybiAwOwoJaWYgKHBpZCA+IDAgJiYgY2lkID4gMCAmJiByaWQgPiAwICYmIHNpZCA+IDApCgl7CgkJd2hpbGUgKHRlbXApCgkJewoJCQlpZiAodGVtcC0+cF9pZCA9PSBwaWQmJnRlbXAtPmNfaWQgPT0gY2lkJiZ0ZW1wLT5yX2lkID09IHJpZCYmdGVtcC0+c19pZCA9PSBzaWQpCgkJCXsKCQkJCWNvdW50cCsrOwoJCQl9CgkJCXRlbXAgPSB0ZW1wLT5uZXh0OwoJCX0KCQlyZXR1cm4gY291bnRwOwoJfQoJZWxzZSBpZiAocGlkID4gMCAmJiBjaWQgPT0gMCAmJiBzaWQgPiAwICYmIHJpZCA+IDApCgl7CgkJd2hpbGUgKHRlbXApCgkJewoJCQlpZiAodGVtcC0+cF9pZCA9PSBwaWQmJnRlbXAtPnJfaWQgPT0gcmlkJiZ0ZW1wLT5zX2lkID09IHNpZCkKCQkJewoJCQkJY291bnRwKys7CgkJCX0KCQkJdGVtcCA9IHRlbXAtPm5leHQ7CgkJfQoJCXJldHVybiBjb3VudHA7Cgl9CgllbHNlIGlmIChwaWQgPiAwICYmIGNpZCA9PSAwICYmIHNpZCA+IDAgJiYgcmlkID09IDApCgl7CgkJd2hpbGUgKHRlbXApCgkJewoJCQlpZiAodGVtcC0+cF9pZCA9PSBwaWQmJnRlbXAtPnNfaWQgPT0gc2lkKQoJCQl7CgkJCQljb3VudHArKzsKCQkJfQoJCQl0ZW1wID0gdGVtcC0+bmV4dDsKCQl9CgkJcmV0dXJuIGNvdW50cDsKCX0KCWVsc2UgaWYgKHBpZCA+IDAgJiYgY2lkID4gMCAmJiBzaWQgPiAwICYmIHJpZCA9PSAwKQoJewoJCXdoaWxlICh0ZW1wKQoJCXsKCQkJaWYgKHRlbXAtPnBfaWQgPT0gcGlkJiZ0ZW1wLT5jX2lkID09IGNpZCYmdGVtcC0+c19pZCA9PSBzaWQpCgkJCXsKCQkJCWNvdW50cCsrOwoJCQl9CgkJCXRlbXAgPSB0ZW1wLT5uZXh0OwoJCX0KCQlyZXR1cm4gY291bnRwOwoJfQoJZWxzZSBpZiAocGlkID09IC0xICYmIHNpZCA9PSAtMSkKCXsKCQlyZXR1cm4gZGF5X2luZm9bc3RhcnREYXldLT5ub2RlQ291bnQ7Cgl9CgllbHNlIGlmIChwaWQgPT0gLTEgJiYgc2lkID4gMCAmJiByaWQgPiAwKQoJewoJCXdoaWxlICh0ZW1wKQoJCXsKCQkJaWYgKHRlbXAtPnJfaWQgPT0gcmlkJiZ0ZW1wLT5zX2lkID09IHNpZCkKCQkJewoJCQkJY291bnRwKys7CgkJCX0KCQkJdGVtcCA9IHRlbXAtPm5leHQ7CgkJfQoJCXJldHVybiBjb3VudHA7Cgl9CgllbHNlIGlmIChwaWQgPT0gLTEgJiYgc2lkID4gMCAmJiByaWQgPT0gMCkKCXsKCQl3aGlsZSAodGVtcCkKCQl7CgkJCWlmICh0ZW1wLT5zX2lkID09IHNpZCkKCQkJewoJCQkJY291bnRwKys7CgkJCX0KCQkJdGVtcCA9IHRlbXAtPm5leHQ7CgkJfQoJCXJldHVybiBjb3VudHA7Cgl9CgllbHNlIGlmIChwaWQgPiAwICYmIGNpZCA+IDAgJiYgc2lkID09IC0xKQoJewoJCXdoaWxlICh0ZW1wKQoJCXsKCQkJaWYgKHRlbXAtPnBfaWQgPT0gcGlkJiZ0ZW1wLT5jX2lkID09IGNpZCkKCQkJewoJCQkJY291bnRwKys7CgkJCX0KCQkJdGVtcCA9IHRlbXAtPm5leHQ7CgkJfQoJCXJldHVybiBjb3VudHA7Cgl9CgllbHNlIGlmIChwaWQgPiAwICYmIGNpZCA9PSAwICYmIHNpZCA9PSAtMSkKCXsKCQl3aGlsZSAodGVtcCkKCQl7CgkJCWlmICh0ZW1wLT5wX2lkID09IHBpZCkKCQkJewoJCQkJY291bnRwKys7CgkJCX0KCQkJdGVtcCA9IHRlbXAtPm5leHQ7CgkJfQoJCXJldHVybiBjb3VudHA7Cgl9Cgp9CmludCBnZXRSZXN1bHQoaW50IHN0YXJ0RGF5LCBpbnQgZW5kRGF5LCBpbnQgY2lkLCBpbnQgcGlkLCBpbnQgcmlkLCBpbnQgc2lkKQp7CglpbnQgY291bnRwID0gMDsKCWlmIChlbmREYXkgPT0gMCkKCXsKCQlyZXR1cm4gZ2V0UmVzdWx0RGF5d2lzZShzdGFydERheSwgY2lkLCBwaWQsIHJpZCwgc2lkKTsKCgl9Cglmb3IgKGludCBpID0gc3RhcnREYXk7IGkgPD0gZW5kRGF5OyBpKyspCgl7CgkJY291bnRwICs9IChnZXRSZXN1bHREYXl3aXNlKHN0YXJ0RGF5LCBjaWQsIHBpZCwgcmlkLCBzaWQpKTsKCX0KCXJldHVybiBjb3VudHA7Cn0KaW50IG1haW4oKQp7CglpbnQgdGM7CgljaW4gPj4gdGM7Cglpbml0KCk7Cgl3aGlsZSAodGMtLSkKCXsKCQljaGFyIGM7CgkJaW50IHN0YXJ0RGF5ID0gMCwgZW5kRGF5ID0gMCwgcGlkID0gMCwgY2lkID0gMCwgc2lkID0gMCwgcmlkID0gMDsKCQljaW4gPj4gYzsKCQlpZiAoYyA9PSAnUycpCgkJewoJCQljaGFyIGRvdDEsIGRvdDI7CgkJCWNpbiA+PiBzdGFydERheSA+PiBwaWQgPj4gZG90MTsKCQkJaWYgKGRvdDEgPT0gJy4nKQoJCQl7CgkJCQljb3V0IDw8ICIuIGhhaVxuIjsKCQkJCWNpbiA+PiBjaWQgPj4gc2lkID4+IGRvdDI7CgkJCQlpZiAoZG90MiA9PSAnLicpCgkJCQkJY2luID4+IHJpZDsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCWNvdXQgPDwgIi4gbmhpXG4iOwoJCQkJY2luID4+IHNpZCA+PiBkb3QyOwoJCQkJaWYgKGRvdDIgPT0gJy4nKQoJCQkJCWNpbiA+PiByaWQ7CgkJCX0KCQkJcHJpbnRmKCIlZCAlZCAlZCAlZCAlZFxuIiwgc3RhcnREYXksIGNpZCwgcGlkLCBzaWQsIHJpZCk7CgkJCWFkZF9wcm9kdWN0X25vZGUoc3RhcnREYXksIGNpZCwgcGlkLCBzaWQsIHJpZCk7CgoJCX0KCQllbHNlCgkJewoJCQljaGFyIGRvdDEsIGRvdDIsIGRvdDM7CgkJCWNpbiA+PiBzdGFydERheSA+PiBkb3QxOwoJCQlpZiAoZG90MSA9PSAnLicpCgkJCXsKCQkJCWNpbiA+PiBlbmREYXkgPj4gcGlkID4+IGRvdDI7CgkJCQlpZiAoZG90MiA9PSAnLicpCgkJCQl7CgkJCQkJY2luID4+IGNpZCA+PiBzaWQgPj4gZG90MzsKCQkJCQlpZiAoZG90MyA9PSAnLicpCgkJCQkJCWNpbiA+PiByaWQ7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJY2luID4+IHNpZCA+PiBkb3QzOwoJCQkJCWlmIChkb3QzID09ICcuJykKCQkJCQkJY2luID4+IHJpZDsKCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCWNpbiA+PiBwaWQgPj4gZG90MjsKCQkJCWlmIChkb3QyID09ICcuJykKCQkJCXsKCQkJCQljaW4gPj4gY2lkID4+IHNpZCA+PiBkb3QzOwoJCQkJCWlmIChkb3QzID09ICcuJykKCQkJCQkJY2luID4+IHJpZDsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQljaW4gPj4gc2lkID4+IGRvdDM7CgkJCQkJaWYgKGRvdDMgPT0gJy4nKQoJCQkJCQljaW4gPj4gcmlkOwoJCQkJfQoKCQkJfQoJCQlwcmludGYoIiVkICVkICVkICVkICVkICVkXG4iLCBzdGFydERheSwgZW5kRGF5LCBjaWQsIHBpZCwgc2lkLCByaWQpOwoJCQlpbnQgcmVzID0gZ2V0UmVzdWx0KHN0YXJ0RGF5LCBlbmREYXksIGNpZCwgcGlkLCByaWQsIHNpZCk7CgkJCWNvdXQgPDwgcmVzIDw8IGVuZGw7CgkJfQoKCgl9CglyZXR1cm4gMDsKfQ==