func_code_string: #include <bits/stdc++.h>   using namespace std;   bool debug = 0;   int n, m, k;   int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};   string direc =  RDLU ;   long long ln, lk, lm;   void et(bool f = 0) {     puts(f ?  MAGIC  :  NOT MAGIC );     exit(0);   }   int a[2505][2505];   bitset<2505> bs[2505];   void fmain() {     scanf( %d , &n);     for (int(i) = 1; (i) <= (int)(n); (i)++)       for (int(j) = 1; (j) <= (int)(n); (j)++) scanf( %d , &a[i][j]);     for (int(i) = 1; (i) <= (int)(n); (i)++)       if (a[i][i] != 0) et();     for (int(i) = 1; (i) <= (int)(n); (i)++)       for (int j = i + 1; j <= n; j++)         if (a[i][j] != a[j][i]) et();     vector<pair<int, pair<int, int>>> vp;     for (int(i) = 1; (i) <= (int)(n); (i)++)       for (int(j) = 1; (j) <= (int)(n); (j)++) vp.push_back({a[i][j], {i, j}});     int N = vp.size();     sort(vp.begin(), vp.end());     for (int i = 0, j = 0; i < N; i = j) {       for (j = i; j < N && vp[i].first == vp[j].first; j++)         ;       for (int k = i; k < j; k++) {         auto p = vp[k].second;         if ((bs[p.first] & bs[p.second]).any()) et();       }       for (int k = i; k < j; k++) {         auto p = vp[k].second;         bs[p.first][p.second] = 1;       }     }     et(1);   }   int main() {     fmain();     return 0;   }   