func_code_string: #include <bits/stdc++.h>   #pragma comment(linker,  /stack:200000000 )   #pragma GCC optimize( Ofast )   #pragma GCC target( sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native )   using namespace std;   const long long int maxN = 5005;   long long int n;   vector<long long int> a, coords, keys;   long long int cnt[maxN];   long long int getKey(long long int x) {     if (x == 0) return 0;     vector<long long int> ans;     if (x < 0) ans.push_back(-1);     x = abs(x);     for (long long int i = 2; i * i <= x; i++) {       if (x % i == 0) {         long long int cnt = 0;         while (x % i == 0) {           cnt++;           x /= i;         }         if (cnt % 2 == 1) ans.push_back(i);       }     }     if (x > 1) ans.push_back(x);     long long int res = 1;     for (auto i : ans) res *= i;     return res;   }   signed main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     cin >> n;     a.resize(n);     keys.resize(n);     for (long long int i = 0; i < n; i++) cin >> a[i];     for (long long int i = 0; i < n; i++) {       long long int key = getKey(a[i]);       keys[i] = key;       coords.push_back(key);     }     sort(coords.begin(), coords.end());     coords.erase(unique(coords.begin(), coords.end()), coords.end());     for (long long int i = 0; i < n; i++)       keys[i] =           (lower_bound(coords.begin(), coords.end(), keys[i]) - coords.begin());     vector<long long int> ans(n + 1, 0);     for (long long int i = 0; i < n; i++) {       for (long long int j = 0; j < maxN; j++) cnt[j] = 0;       long long int cntZ = 0, cntD = 0;       for (long long int j = i; j < n; j++) {         long long int key = keys[j];         if (coords[key] == 0)           cntZ++;         else {           cnt[key]++;           if (cnt[key] == 1) cntD++;         }         if (cntD > 0)           ans[cntD]++;         else           ans[cntZ > 0]++;       }     }     for (long long int i = 1; i <= n; i++) cout << ans[i] <<    ;     return 0;   }   