#include #include #include typedef struct { int polaczenia[20]; int stopien; int odwiedzony; int lewy, prawy; int NL, NP; } punkt; inline int min(int, int); void oblicz(punkt *, punkt *); punkt punkty[100]; int main () { int t, n, ilosc, ilosc_prev, a, b, max_t; scanf("%d", &t); max_t = t; getchar(); while(t--) { if (max_t != t+1) ilosc_prev = ilosc; scanf("%d", &ilosc); getchar(); if (max_t == t+1) ilosc_prev = 0; for (n=0; n < ilosc+1; n++) { //inicjacja zmiennych punkty[n].stopien = 0; punkty[n].odwiedzony = 0; punkty[n].lewy = punkty[n].prawy = 0; punkty[n].NL = punkty[n].NP = 1; } punkty[0].odwiedzony = 1; for (n=0; n < ilosc-1; n++) { scanf("%d %d", &a, &b); getchar(); punkty[a].polaczenia[punkty[a].stopien] = b; punkty[b].polaczenia[punkty[b].stopien] = a; punkty[a].stopien++; punkty[b].stopien++; } oblicz(&punkty[1], 0); if (punkty[1].lewy > punkty[1].prawy) { printf("%d %d\n", punkty[1].prawy, (punkty[1].NP > 10007) ? punkty[1].NP%10007 : punkty[1].NP); } else if (punkty[1].lewy < punkty[1].prawy) { printf("%d %d\n", punkty[1].lewy, (punkty[1].NL > 10007) ? punkty[1].NL%10007 : punkty[1].NL); } else { printf("%d %d\n", punkty[1].lewy, ((punkty[1].NL+punkty[1].NP) > 10007) ? (punkty[1].NL+punkty[1].NP)%10007 : punkty[1].NL+punkty[1].NP); } } return 0; } void oblicz(punkt * syn, punkt * rodzic) { //oblicza lewe i prawe wartosci dla podanego punktu int n, suma; int * pol; syn->odwiedzony = 1; pol = syn->polaczenia; for (n = 0; n < syn->stopien; n++) { if (punkty[pol[n]].odwiedzony!=1) { oblicz(&punkty[pol[n]], syn); } } syn->lewy++; if (rodzic) { rodzic->NP*=syn->NL; if (rodzic->NP > 10007) rodzic->NP%=10007; if (syn->lewy > syn->prawy) { rodzic->NL*=syn->NP; if (rodzic->NL > 10007) rodzic->NL%=10007; } else if (syn->lewy < syn->prawy) { rodzic->NL*=syn->NL; if (rodzic->NL > 10007) rodzic->NL%=10007; } else { rodzic->NL*=(syn->NL+syn->NP); if (rodzic->NL > 10007) rodzic->NL%=10007; } rodzic->prawy += syn->lewy; rodzic->lewy += min(syn->prawy,syn->lewy); } } inline int min(int a, int b) { return ((a > b) ? b : a); }