Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <algorithm>
- #include <cctype>
- using namespace std;
- ifstream fin( "perspic.in" );
- ofstream fout( "perspic.out" );
- const int MaxN = 101;
- const int Mod = 13007;
- const int MaxNr = MaxN * MaxN;
- int M[MaxN][MaxN], ok[MaxN][MaxN], lin[MaxNr], col[MaxN * MaxN];
- int maxp[MaxNr], mx;
- static inline int quickExp( int a, int n ) {
- int p = 1;
- while ( n > 0 ) {
- if ( n & 1 ) {
- p = (p * a) % Mod;
- }
- a = (a * a) % Mod;
- n >>= 1;
- }
- return p;
- }
- static inline void fact( int nr ) {
- int d = 2, p;
- while ( d * d <= nr ) {
- p = 0;
- while ( nr % d == 0 ) {
- nr /= d;
- ++p;
- }
- if ( p > 0 ) {
- if ( d > mx ) {
- mx = d;
- }
- }
- maxp[d] = max( p, maxp[d] );
- ++d;
- }
- if ( nr > 1 ) {
- if ( nr > mx ) {
- mx = nr;
- }
- maxp[nr] = max( 1, maxp[nr] );
- }
- }
- int main() {
- int n, m, i, j, nr, s, l, c, l1, c1, l2, c2, res;
- char ch;
- fin >> n >> m;
- nr = 1;
- for ( i = 0; i < n; ++i ) {
- for ( j = 0; j < n; ++j ) {
- lin[nr] = i;
- col[nr] = j;
- M[i][j] = nr++;
- }
- }
- while ( isspace( ch = fin.get() ) );
- for ( i = 0; i < m; ++i ) {
- switch ( ch ) {
- case 'C':
- fin >> c1 >> c2;
- for ( j = 0; j < n; ++j ) {
- swap( M[j][c1 - 1], M[j][c2 - 1] );
- }
- break;
- case 'R':
- fin >> l1 >> l2;
- for ( j = 0; j < n; ++j ) {
- swap( M[l1 - 1][j], M[l2 - 1][j] );
- }
- break;
- case 'E':
- fin >> l1 >> c1 >> l2 >> c2;
- swap( M[l1 - 1][c1 - 1], M[l2 - 1][c2 - 1] );
- break;
- }
- while ( isspace( ch = fin.get() ) );
- }
- nr = 1;
- for ( i = 0; i < n; ++i ) {
- for ( j = 0; j < n; ++j ) {
- l = i;
- c = j;
- s = 0;
- while ( !ok[l][c] ) {
- l1 = l;
- ok[l][c] = 1;
- l = lin[M[l][c]];
- c = col[M[l1][c]];
- ++s;
- }
- if ( s ) {
- fact( s );
- }
- ++nr;
- }
- }
- res = 1;
- for ( i = 1; i <= mx; ++i ) {
- res = (res * quickExp( i, maxp[i] )) % Mod;
- }
- fout << res;
- fin.close();
- fout.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement