#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
/* Only Case 38 fails
3 2 6
1 1
1 2
2 1
2 2
3 1
3 2
*/
#define MAX_SEATS 1000
#define MAX_CUSTOMERS 2
#define UNKNOWN -1
void process (int freq[MAX_SEATS][MAX_CUSTOMERS], int& tickets, int& rides, int& promotions)
{
rides++;
// find frontmost seat
int seat1=UNKNOWN;
int customer1=UNKNOWN;
for (int i=0; i<MAX_SEATS; i++)
{
if (freq[i][0]>0)
{
customer1=0;
seat1=i;
break;
}
else if (freq[i][1]>0)
{
customer1=1;
seat1=i;
break;
}
}
freq[seat1][customer1]--;
tickets--;
// try to check whether second seat can be selected without promotion
// find frontmost seat of other customer with multple tickets if available
// otherwise, find front most seat of other customer with single ticket
int seat2_freq1=UNKNOWN;
int seat2_freq_mult=UNKNOWN;
int customer2=1-customer1;
for (int i=seat1+1; i<MAX_SEATS; i++)
{
if (freq[i][customer2]>1)
{
seat2_freq_mult=i;
break;
}
else if ((seat2_freq1==UNKNOWN) && (freq[i][customer2]==1))
{
seat2_freq1=i;
}
}
if (seat2_freq_mult!=UNKNOWN)
{
freq[seat2_freq_mult][customer2]--;
tickets--;
}
else if (seat2_freq1!=UNKNOWN)
{
freq[seat2_freq1][customer2]--;
tickets--;
}
// select second seat using promotion
else if ((seat1>0)&&(freq[seat1][customer2]>=1))
{
freq[seat1][customer2]--;
tickets--;
promotions++;
}
}
int main() {
int t;
cin >> t;
for (int i=0; i<t; i++)
{
int seats,customers,tickets;
cin >> seats >> customers >> tickets;
int freq[MAX_SEATS][MAX_CUSTOMERS]={0};
for (int j=0; j<tickets; j++)
{
int position,buyer;
cin >> position >> buyer;
// convert from 1-based to 0-based index
freq[position-1][buyer-1]++;
}
int rides=0;
int promotions=0;
while (tickets>0)
{
process (freq,tickets,rides,promotions);
}
printf ("Case #%d: %d %d\n",i+1,rides,promotions);
}
}
I2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxhbGdvcml0aG0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovKiBPbmx5IENhc2UgMzggZmFpbHMKMyAyIDYKMSAxCjEgMgoyIDEKMiAyCjMgMQozIDIKKi8KCiNkZWZpbmUgTUFYX1NFQVRTIDEwMDAKI2RlZmluZSBNQVhfQ1VTVE9NRVJTIDIKI2RlZmluZSBVTktOT1dOIC0xCgp2b2lkIHByb2Nlc3MgKGludCBmcmVxW01BWF9TRUFUU11bTUFYX0NVU1RPTUVSU10sIGludCYgdGlja2V0cywgaW50JiByaWRlcywgaW50JiBwcm9tb3Rpb25zKQp7CiAgICAgICAgcmlkZXMrKzsKCiAgICAgICAgLy8gZmluZCBmcm9udG1vc3Qgc2VhdAogICAgICAgIGludCBzZWF0MT1VTktOT1dOOwogICAgICAgIGludCBjdXN0b21lcjE9VU5LTk9XTjsKICAgICAgICBmb3IgKGludCBpPTA7IGk8TUFYX1NFQVRTOyBpKyspCiAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGZyZXFbaV1bMF0+MCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tZXIxPTA7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXQxPWk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoZnJlcVtpXVsxXT4wKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21lcjE9MTsKICAgICAgICAgICAgICAgICAgICAgICAgc2VhdDE9aTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmcmVxW3NlYXQxXVtjdXN0b21lcjFdLS07CiAgICAgICAgdGlja2V0cy0tOwoKICAgICAgICAvLyB0cnkgdG8gY2hlY2sgd2hldGhlciBzZWNvbmQgc2VhdCBjYW4gYmUgc2VsZWN0ZWQgd2l0aG91dCBwcm9tb3Rpb24KICAgICAgICAvLyBmaW5kIGZyb250bW9zdCBzZWF0IG9mIG90aGVyIGN1c3RvbWVyIHdpdGggbXVsdHBsZSB0aWNrZXRzIGlmIGF2YWlsYWJsZQogICAgICAgIC8vIG90aGVyd2lzZSwgZmluZCBmcm9udCBtb3N0IHNlYXQgb2Ygb3RoZXIgY3VzdG9tZXIgd2l0aCBzaW5nbGUgdGlja2V0CiAgICAgICAgaW50IHNlYXQyX2ZyZXExPVVOS05PV047CiAgICAgICAgaW50IHNlYXQyX2ZyZXFfbXVsdD1VTktOT1dOOwogICAgICAgIGludCBjdXN0b21lcjI9MS1jdXN0b21lcjE7CiAgICAgICAgZm9yIChpbnQgaT1zZWF0MSsxOyBpPE1BWF9TRUFUUzsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChmcmVxW2ldW2N1c3RvbWVyMl0+MSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2VhdDJfZnJlcV9tdWx0PWk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoKHNlYXQyX2ZyZXExPT1VTktOT1dOKSAmJiAoZnJlcVtpXVtjdXN0b21lcjJdPT0xKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2VhdDJfZnJlcTE9aTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChzZWF0Ml9mcmVxX211bHQhPVVOS05PV04pCiAgICAgICAgewogICAgICAgICAgICAgICAgZnJlcVtzZWF0Ml9mcmVxX211bHRdW2N1c3RvbWVyMl0tLTsKICAgICAgICAgICAgICAgIHRpY2tldHMtLTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoc2VhdDJfZnJlcTEhPVVOS05PV04pCiAgICAgICAgewogICAgICAgICAgICAgICAgZnJlcVtzZWF0Ml9mcmVxMV1bY3VzdG9tZXIyXS0tOwogICAgICAgICAgICAgICAgdGlja2V0cy0tOwogICAgICAgIH0KICAgICAgICAvLyBzZWxlY3Qgc2Vjb25kIHNlYXQgdXNpbmcgcHJvbW90aW9uCiAgICAgICAgZWxzZSBpZiAoKHNlYXQxPjApJiYoZnJlcVtzZWF0MV1bY3VzdG9tZXIyXT49MSkpCiAgICAgICAgewogICAgICAgICAgICAgICAgZnJlcVtzZWF0MV1bY3VzdG9tZXIyXS0tOwogICAgICAgICAgICAgICAgdGlja2V0cy0tOwogICAgICAgICAgICAgICAgcHJvbW90aW9ucysrOwogICAgICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICAgICAgaW50IHQ7CiAgICAgICAgY2luID4+IHQ7CiAgICAgICAgZm9yIChpbnQgaT0wOyBpPHQ7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnQgc2VhdHMsY3VzdG9tZXJzLHRpY2tldHM7CiAgICAgICAgICAgICAgICBjaW4gPj4gc2VhdHMgPj4gY3VzdG9tZXJzID4+IHRpY2tldHM7CiAgICAgICAgICAgICAgICBpbnQgZnJlcVtNQVhfU0VBVFNdW01BWF9DVVNUT01FUlNdPXswfTsKICAgICAgICAgICAgICAgIGZvciAoaW50IGo9MDsgajx0aWNrZXRzOyBqKyspCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3NpdGlvbixidXllcjsKICAgICAgICAgICAgICAgICAgICAgICAgY2luID4+IHBvc2l0aW9uID4+IGJ1eWVyOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IGZyb20gMS1iYXNlZCB0byAwLWJhc2VkIGluZGV4CiAgICAgICAgICAgICAgICAgICAgICAgIGZyZXFbcG9zaXRpb24tMV1bYnV5ZXItMV0rKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGludCByaWRlcz0wOwogICAgICAgICAgICAgICAgaW50IHByb21vdGlvbnM9MDsKICAgICAgICAgICAgICAgIHdoaWxlICh0aWNrZXRzPjApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgKGZyZXEsdGlja2V0cyxyaWRlcyxwcm9tb3Rpb25zKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHByaW50ZiAoIkNhc2UgIyVkOiAlZCAlZFxuIixpKzEscmlkZXMscHJvbW90aW9ucyk7CiAgICAgICAgfQp9Cg==