//4:29 - 4:55 // - 5:20 (functional version) #include #include #include #include #include using namespace std; typedef complex Point; typedef vector Points; bool f(Points A, Points B){ transform(A.begin(), A.end(), A.begin(), bind2nd(minus(), A[0])); for(int k = 0; k < 5; k++){ transform(B.begin(), B.end(), B.begin(), bind2nd(multiplies(), Point(0, 1))); transform(B.begin(), B.end(), B.begin(), bind2nd(minus(), B[0])); if(A == B){return true;} reverse(B.begin(), B.end()); transform(B.begin(), B.end(), B.begin(), bind2nd(minus(), B[0])); if(A == B){return true;} reverse(B.begin(), B.end()); } return false; } struct Get{ void operator ()(Point & p){cin >> p.real() >> p.imag();} }; int main(){ int n, m; cin >> n; if(n == 0){return 0;} cin >> m; Points A(m, 0); for_each(A.begin(), A.end(), Get()); for(int i = 1; i <= n; i++){ int M; cin >> M; Points B(M, 0); for_each(B.begin(), B.end(), Get()); if(m != M){continue;} if(f(A, B)){ cout << i << endl; } } cout << "+++++" << endl; return main(); }