Problem F

Rektorns bryderier

Källkod: rektor.c, rektor.pas, rektor.p, rektor.cc eller rektor.cpp

Det är inget lätt problem hon har, vår rektor. Hon vill sätta samman en kommitté med forskare och studierektorer från alla institutioner. Hon vill att kommittén ska innehålla en tredjedel kvinnliga forskare, en tredjedel manliga forskare och en tredjedel studierektorer. Om det inte går att lösa exakt, så ska det vara så nära som möjligt. Det vill säga om det finns n institutioner så får det finnas maximalt n / 3 personer från varje kategori. Problemet är bara att eftersom tvärvetenskapliga relationer uppmuntras, så kan varje person arbeta på upp till fem olika institutioner. Dessutom ska varje institution vara representerad av en person. En person som representerar en institution kan givetvis inte representera en annan. Vilken tur att ni finns, som kan skriva ett program som hittar sådana representationer så att villkoren uppfylls.

Indata börjar med en rad som anger antalet fall, N. Sedan följer N uppsättningar med personer. Varje rad innehåller personens namn, som är ett unikt ord på upp till fem bokstäver. Åtskiljt av blanksteg följer sedan ett tecken, "K", "M" eller "S", för kvinnlig forskare, manlig forskare respektive studierektor. Efter blanksteg följer sedan de institutioner som personen arbetar åt. Institutionerna är ord på upp till fem bokstäver. För varje fall finns det upp till 500 personer och upp till 500, unika, institutioner. Uppsättningen avslutas med order "SLUT" på en egen rad.

Utdata innehåller, för varje fall, ett svar. Svaret är antingen "Omöjligt" om det inte går att uppfylla kriterierna, annars "Möjligt". Om det är möjligt, skall dessutom ett antal rader följa, en rad för varje institution. På varje rad skall institutionens namn stå följt av blanksteg och den person som ska representera institutionen. Radernas inbördes ordning är valfri.

Exempel på indata:

2
kalle M data ekon matte
olle M data
stina K data
lente S matte
SLUT
kalle M data ekon matte psyk
olle M data
stina K data
lente S matte
SLUT

Utdata på exempelindatat:

Möjligt
data stina
ekon kalle
matte lente
Omöjligt