#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("inline")
#include<bits/stdc++.h>
using namespace std;
template < class T> vector< vector< T>> Rot90( vector< vector< T>> a) {
int i;
int j;
int x;
int y;
x = a.size ( ) ;
y = a[ 0 ] .size ( ) ;
vector< vector< T>> b( y, vector< T> ( x) ) ;
for ( i= ( 0 ) ; i< ( x) ; i++ ) {
for ( j= ( 0 ) ; j< ( y) ; j++ ) {
b[ j] [ x- 1 - i] = a[ i] [ j] ;
}
}
return b;
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
class Solution{
public :
bool findRotation( vector< vector< int >> & mat, vector< vector< int >> & target) {
int Lj4PdHRW;
for ( Lj4PdHRW= ( 0 ) ; Lj4PdHRW< ( 4 ) ; Lj4PdHRW++ ) {
if ( mat== target) {
return true ;
}
mat = Rot90( mat) ;
}
return false ;
}
}
;
// cLay version 20210607-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// class Solution {
// public:
// bool findRotation(vector<vector<int>>& mat, vector<vector<int>>& target) {
// rep(4){
// if(mat==target) return true;
// mat = Rot90(mat);
// }
// return false;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk9mYXN0IikKI3ByYWdtYSBHQ0Mgb3B0aW1pemUoInVucm9sbC1sb29wcyIpCiNwcmFnbWEgR0NDIG9wdGltaXplKCJpbmxpbmUiKQojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0ZW1wbGF0ZTxjbGFzcyBUPiB2ZWN0b3I8dmVjdG9yPFQ+PiBSb3Q5MCh2ZWN0b3I8dmVjdG9yPFQ+PiBhKXsKICBpbnQgaTsKICBpbnQgajsKICBpbnQgeDsKICBpbnQgeTsKICB4ID0gYS5zaXplKCk7CiAgeSA9IGFbMF0uc2l6ZSgpOwogIHZlY3Rvcjx2ZWN0b3I8VD4+IGIoeSwgdmVjdG9yPFQ+KHgpKTsKICBmb3IoaT0oMCk7aTwoeCk7aSsrKXsKICAgIGZvcihqPSgwKTtqPCh5KTtqKyspewogICAgICBiW2pdW3gtMS1pXSA9IGFbaV1bal07CiAgICB9CiAgfQogIHJldHVybiBiOwp9CiNkZWZpbmUgbWFpbiBkdW1teV9tYWluCmludCBtYWluKCl7CiAgcmV0dXJuIDA7Cn0KI3VuZGVmIG1haW4KY2xhc3MgU29sdXRpb257CiAgcHVibGljOgogIGJvb2wgZmluZFJvdGF0aW9uKHZlY3Rvcjx2ZWN0b3I8aW50Pj4mIG1hdCwgdmVjdG9yPHZlY3RvcjxpbnQ+PiYgdGFyZ2V0KXsKICAgIGludCBMajRQZEhSVzsKICAgIGZvcihMajRQZEhSVz0oMCk7TGo0UGRIUlc8KDQpO0xqNFBkSFJXKyspewogICAgICBpZihtYXQ9PXRhcmdldCl7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgbWF0ID0gUm90OTAobWF0KTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9Cn0KOwovLyBjTGF5IHZlcnNpb24gMjAyMTA2MDctMQoKLy8gLS0tIG9yaWdpbmFsIGNvZGUgLS0tCi8vICNkZWZpbmUgbWFpbiBkdW1teV9tYWluCi8vIHt9Ci8vICN1bmRlZiBtYWluCi8vIAovLyBjbGFzcyBTb2x1dGlvbiB7Ci8vIHB1YmxpYzoKLy8gICBib29sIGZpbmRSb3RhdGlvbih2ZWN0b3I8dmVjdG9yPGludD4+JiBtYXQsIHZlY3Rvcjx2ZWN0b3I8aW50Pj4mIHRhcmdldCkgewovLyAgICAgcmVwKDQpewovLyAgICAgICBpZihtYXQ9PXRhcmdldCkgcmV0dXJuIHRydWU7Ci8vICAgICAgIG1hdCA9IFJvdDkwKG1hdCk7Ci8vICAgICB9Ci8vICAgICByZXR1cm4gZmFsc2U7Ci8vICAgfQovLyB9Owo=