#include "rotate.h"
//#include "grader.cpp"
#include <bits/stdc++.h>
using namespace std;
//#define endl '\n'
#define ll long long
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define orderset tree<pair<int,int>,null_type,less<pair<int,int>>,rb_tree_tag,tree_order_statistics_node_update>
void energy(int n,vector<int> v){
orderset se;
const int deg90=25000,deg180=50000;
for(int i=0;i<n;i++){
se.insert({v[i],i});
}
while(se.size()>=2){
int idx=(*se.begin()).second;
se.erase(se.begin());
if(v[idx]>=deg90){
auto it=se.end();
it--;
int idx2=(*it).second;
rotate({idx},deg180-(v[idx]-deg90));
rotate({idx2},deg180-v[idx2]);
se.erase(it);
continue;
}
auto it=se.lower_bound({v[idx]+deg90,0});
if(it!=se.end()&&(*it).first==v[idx]+deg90){
se.erase(it);
continue;
}
int cnt=se.order_of_key({v[idx]+deg90,0});
if(cnt>=se.size()-cnt){
it--;
int idx2=(*it).second;
se.erase(it);
rotate({idx2},v[idx]+deg90-v[idx2]);
}
else{
int idx2=(*it).second;
se.erase(it);
rotate({idx2},deg180-(v[idx2]-v[idx]-deg90));
}
}
}