http://codeforces.com/problemset/problem/886/C
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int p[123456];
for(int i=1; i<n+1; i++)
cin>>p[i];
bool vis[123456]= {0};
long long M1=0,M2=0,ans=0;
for(int i=1; i<n+1; i++) {
if(vis[i]==1)
continue;
int x=p[i];
vis[x]=1;
long long cnt=1;
while(x!=i) {
x=p[x];
vis[x]=1;
cnt++;
}
ans+=cnt*cnt;
if(cnt>M1) {
M2=M1;
M1=cnt;
} else if(cnt>M2) {
M2=cnt;
}
}
cout<<ans+2*M1*M2;
}