Candidati

Time limit: 2.5s Memory limit: 512MB Input: candidati.in Output: candidati.out

Pe planeta Utopia urmează să se organizeze alegeri. Fiecare dintre cele NN partide va trebui să-și aleagă un singur candidat dintre MM politicieni și bineînțeles un politician poate candida pentru cel mult un partid.

Pentru fiecare partid cunoaștem intervalele disjuncte de timp când au fost la guvernare, iar pentru fiecare politician cunoaștem intervalele de timp în care a colaborat cu diverse asociații non-profit la care a făcut voluntariat. Se poate întâmpla ca un politician să facă voluntariat simultan în mai locuri.

Preferința unui partid ii pentru un politician jj se obține prin însumarea timpului total în care politicianul jj a făcut voluntariat, în cel puțin un loc, în perioadele în care partidul ii a fost la guvernare. Cu cât acest număr este mai mare, cu atât partidul ii preferă mai mult politicianul jj.

Preferința unui politician jj pentru un partid ii se obține în felul următor:

  • Pentru fiecare partid ii calculăm numărul pip_i de puncte de putere al partidului ca fiind numărul minim de intervale de voluntariat ale tuturor politicienilor cu care se pot acoperi toate intervalele în care partidul ii s-a aflat la guvernare, sau 0 dacă acest lucru este imposibil.
  • Notăm cu t0t_0 primul moment de timp și cu t1t_1 ultimul moment de timp când politicianul jj a făcut voluntariat. Definim qjq_j ca fiind numărul de perioade din intervalul [t0,t1][t_0, t_1] când politicianul nu a făcut voluntariat.
  • Pentru un partid ii și politician jj, definim preferința politicianului pentru partidul ii ca fiind numărul de moduri de a distribui cele pip_i puncte de putere ale partidului în cele qjq_j intervale în care nu a făcut voluntariat (modulo 1 000 000 0071 \ 000 \ 000 \ 007). Fiecărui interval i se poate distribui un număr natural de puncte, eventual 00. Dacă cel puțin unul dintre pi=0p_i = 0 și qj=0q_j = 0 preferința este 11. Cu cât acest număr este mai mare, cu atât politicianul jj preferă partidul ii mai mult.

Fie cic_i candidatul ales de partidul ii pentru alegeri (1ciM1 \leq c_i \leq M). Alegerile se consideră echilibrate dacă nu există două partide ii și jj (1i,jN,ij1 \leq i, j \leq N, i \neq j) unde partidul ii preferă politicianul cjc_j mai mult decât pe politicianul cic_i, iar politicianul cjc_j preferă partidul ii mai mult decât partidul jj.

Cerințe

Sunt trei cerințe, iar cerința de rezolvat este dată de C{1,2,3}C \in \{1, 2, 3\}.

  • C=1\bm{C = 1}: Dându-se partidul xx, determinați preferințele sale pentru fiecare dintre cei MM politicieni.
  • C=2\bm{C = 2}: Dându-se politicianul yy, determinați preferințele sale pentru fiecare dintre cele NN partide.
  • C=3\bm{C = 3}: Determinați suma tuturor preferințelor partidelor (modulo 1 000 000 0071 \ 000 \ 000 \ 007), suma tuturor preferințelor politicienilor (modulo 1 000 000 0071 \ 000 \ 000 \ 007) și o listă de candidați, în așa fel încât alegerile să fie echilibrate, dacă acest lucru este posibil.

Date de intrare

Pe prima linie se află CC, numărul cerinței, urmat de valoarea xx pentru cerința 11 sau de valoarea yy pentru cerința 22.

Pe a doua linie se află NN, numărul partidelor. Urmează în ordine descrierea intervalelor de timp când partidele au fost la guvernare. O descriere de acest fel începe cu valoarea KK, reprezentând numărul intervalelor, urmată de KK linii, care conțin câte două numere întregi aa și bb, începutul și sfârșitul intervalului.
Pe următorul rând se află MM, numărul politicienilor. Descrierea lor are același format ca în cazul partidelor.

Date de ieșire

  • C=1\bm{C = 1}: Se vor afișa MM linii. Linia jj reprezintă preferințele partidului xx pentru politicianul jj.
  • C=2\bm{C = 2}: Se vor afișa NN linii. Linia ii reprezintă preferințele politicianului yy pentru partidul ii.
  • C=3\bm{C = 3}: Pe prima linie se va afișa suma tuturor preferințelor partidelor (modulo 1 000 000 0071 \ 000 \ 000 \ 007). Pe a doua linie se va afișa suma tuturor preferințelor politicienilor (modulo 1 000 000 0071 \ 000 \ 000 \ 007). Dacă nu se pot organiza alegeri echilibrate, pe următoarea linie se va afișa -1. În caz contrar se vor afișa încă NN linii. Cea de-a ii-a linie dintre acestea reprezintă candidatul cic_i trimis la alegeri de partidul ii. Dacă există mai multe soluții, se poate afișa oricare dintre ele.

Restricții și precizări

  • 1NM1 0001 \leq N \leq M \leq 1 \ 000;
  • 1K1001 \leq K \leq 100;
  • 1xN1 \leq x \leq N;
  • 1yM1 \leq y \leq M;
  • 0ab10180 \leq a \leq b \leq 10^{18};
  • La cerința 33 punctajul aferent fiecărui test se acordă astfel: 20%20\% dacă prima linie a fișierului de ieșire este corectă, 20%20\% dacă a doua linie a fișierului de ieșire este corectă și 60%60\% dacă restul liniilor din fișier sunt corecte.
  • Intervalele în care un anumit partid a fost la guvernare sunt disjuncte.
# Scor Restricții
1 6 C=1,N10,M10,a105,b105C = 1, N \leq 10, M \leq 10, a \leq 10^5, b \leq 10^5
2 13 C=1C = 1
3 9 C=2C = 2 și numărul total de intervale din fișierul de intrare nu depășește 1 0001 \ 000
4 15 C=2C = 2
5 57 C=3C = 3

Exemplul 1

candidati.in

1 2
2
1
1 10
2
8 10
2 6
3
1
1 10
3
9 10
1 2
5 6
2
6 8
7 7

candidati.out

8
5
2

Explicație

Partidul 2 a fost la guvernare în perioadele [2,6][2, 6] respectiv [8,10][8, 10].

Primul politician a făcut voluntariat în perioada [1,10][1, 10], unitățile de timp comune cu partidul 22 fiind: 2,3,4,5,6,8,9,102, 3, 4, 5, 6, 8, 9, 10, în total 88 unități de timp.

Al doilea politician a făcut voluntariat în perioadele [1,2][1, 2], [5,6][5, 6] și [9,10][9, 10], unitățile de timp comune cu partidul 22 fiind: 2,5,6,9,102, 5, 6, 9, 10, în total 55 unități de timp.

Al treilea politician a făcut voluntariat în perioada [6,8][6, 8] și simultan în perioada [7,7][7, 7] unitățile de timp comune cu partidul 22 fiind 66 și 88, în total 22 unități de timp.

Exemplul 2

candidati.in

2 2
2
1
1 10
2
8 10
2 6
3
2
2 5
8 9
3
9 10
1 2
5 7
2
6 8
7 7

candidati.out

7
5

Explicație

Politicianul 22 a făcut voluntariat în perioadele [1,2][1, 2], [5,7][5, 7], respectiv [9,10][9, 10], deci a început să facă voluntariat pentru prima oară în momentul t0=1t_0 = 1 și a încetat să facă voluntariat ultima oară în momentul t1=10t_1 = 10. În perioada [t0,t1][t_0, t_1] au fost q2=2q_2 = 2 perioade în care n-a luat parte la niciun voluntariat, respectiv [3,4][3, 4] și [8,8][8, 8].

Partidul 11 a fost la guvernare în perioada [1,10][1, 10], perioadă ce se poate acoperi cu minim p1=6p_1 = 6 intervale dintre cele asociate politicienilor: [1,2][1, 2], [2,5][2, 5], [5,7][5, 7], [6,8][6, 8], [8,9][8, 9] și [9,10][9, 10]. În cele q2=2q_2 = 2 perioade se pot distribui p1=6p_1 = 6 puncte de putere ale partidului în 77 moduri: în prima perioadă se pot distribui 0,1,2,3,4,50, 1, 2, 3, 4, 5, sau 66 puncte, iar în a doua perioadă restul.

Partidul 22 a fost la guvernare în perioadele [2,6][2, 6] și [8,10][8, 10], perioade ce se pot acoperi cu minim p2=4p_2 = 4 intervale dintre cele asociate politicienilor: [2,5][2, 5], [5,7][5, 7], [8,9][8, 9] și [9,10][9, 10]. În cele q2=2q_2 = 2 perioade se pot distribui cele p2=4p_2 = 4 puncte în 55 moduri.

Exemplul 3

candidati.in

3
2
1
1 10
2
8 10
2 6
3
2
2 5
8 9
3
9 10
1 2
5 6
2
6 8
7 7

candidati.out

28
16
2
1

Explicație

Suma tuturor preferințelor partidelor este 2828.

Suma tuturor preferințelor politicienilor este 1616.

Pentru partidul 11 candidează politicianul 22, iar pentru partidul 22 candidează politicianul 11, lista de candidați fiind echilibrată. Dacă pentru partidul 11 ar fi candidat politicianul 33 și pentru partidul 22 ar fi candidat politicianul 22, lista candidaților n-ar mai fi fost echilibrată, pentru că politicianul 22 preferă mai mult partidul 11 (preferința 77) decât partidul 22 (preferința 55) și partidul 11 preferă mai mult politicianul 22 (preferința 66) decât politicianul 33 (preferința 33).

Log in or sign up to be able to send submissions!