#include #include using namespace std; using namespace atcoder; #define LOGICAL_SUB1(name,expr) [&](const auto& name){return expr;} #define LOGICAL_SUB2(expr) [&](const auto& arg){return expr;} #define LOGICAL_SUB0(_1,_2,_3,...) _3 #define LOGICAL(...) LOGICAL_SUB0(__VA_ARGS__,LOGICAL_SUB1,LOGICAL_SUB2)(__VA_ARGS__) #define CONCAT(a,b) a ## b #define VAR_CONCAT(p) CONCAT(p,__LINE__) #define LOOP(n) for(long long VAR_CONCAT(VAR)=0;VAR_CONCAT(VAR)=0; i--)//n-1から0のループ #define RREP(i,a,n) for(long long i = (long long)(a)-1LL;i>=(long long)(n); i--) #define repp(i,n) for(long long i= (long long)n;i>=0LL;i--) #define REPP(i,a,n) for(long long i = (a);i>=(long long)(n);i--) #define fore(x,a) for(auto (x):(a)) #define FORE(x,a) for(auto& (x):(a)) #define dwhile(a) while(!(a))//わかりやすいだけ #define all(x) x.begin(), x.end() #define Yes cout << "Yes" << '\n' #define No cout << "No" << '\n' #define YES cout << "YES" << '\n' #define NO cout << "NO" << '\n' #define yn(b) if(b){Yes;}else{No;} #define YN(b) if(b){YES;}else{NO;} #define rsort(i) sort(i);reverse(i) #define UNIQUE(n) n.erase(unique(all(n)),n.end()) #define dump(...) cout << __LINE__ << ":[" << #__VA_ARGS__ << "]: ";println(__VA_ARGS__); namespace others{ //https://qiita.com/hibit/items/8ca9a58ccd23014f3a54#%E5%85%A8%E9%83%A8%E3%81%BE%E3%81%A8%E3%82%81%E3%81%A6 template ostream &operator<<(ostream &os, const pair &p) { os << "(" << p.first << "," << p.second << ")"; return os; } template istream &operator>>(istream &is, pair &p) { is >> p.first >> p.second; return is; } template ostream &operator<<(ostream &os, const vector &v) { for (int i = 0; i < (int)v.size(); i++) { os << v[i] << (i + 1 != (int)v.size() ? " " : ""); } return os; } template ostream &operator<<(ostream &os, const vector> &v) { for (int i = 0; i < (int)v.size(); i++) { os << v[i] << endl; } return os; } template ostream &operator<<(ostream &os, const vector>> &v) { for (int i = 0; i < (int)v.size(); i++) { os << "i = " << i << endl; os << v[i]; } return os; } template istream &operator>>(istream &is, vector &v) { for (T &in : v) is >> in; return is; } template ostream &operator<<(ostream &os, const map &mp) { for (auto &[key, val] : mp) { os << key << ":" << val << " "; } return os; } template ostream &operator<<(ostream &os, const set &st) { auto itr = st.begin(); for (int i = 0; i < (int)st.size(); i++) { os << *itr << (i + 1 != (int)st.size() ? " " : ""); itr++; } return os; } template ostream &operator<<(ostream &os, const multiset &st) { auto itr = st.begin(); for (int i = 0; i < (int)st.size(); i++) { os << *itr << (i + 1 != (int)st.size() ? " " : ""); itr++; } return os; } template ostream &operator<<(ostream &os, queue q) { while (q.size()) { os << q.front() << " "; q.pop(); } return os; } template ostream &operator<<(ostream &os, deque q) { while (q.size()) { os << q.front() << " "; q.pop_front(); } return os; } template ostream &operator<<(ostream &os, stack st) { while (st.size()) { os << st.top() << " "; st.pop(); } return os; } template ostream &operator<<(ostream &os, priority_queue pq) { while (pq.size()) { os << pq.top() << " "; pq.pop(); } return os; } //vector template T vmax(vector& n){ T mx=n[0]; rep(i,n.size()){ if(mx T vmin(vector& n){ T mn=n[0]; rep(i,n.size()){ if(mn>n[i]){ mn=n[i]; } }return mn; } //pair template pair operator+(const pair&l,const pair&r){ return{l.first+r.first,l.second+r.second}; }template pair operator-(const pair&l,const pair&r){ return{l.first-r.first,l.second-r.second}; }template pair operator*(const pair&l,const pair&r){ return{l.first*r.first,l.second*r.second}; }template pair operator/(const pair&l,const pair&r){ return{l.first/r.first,l.second/r.second}; }template pair operator%(const pair&l,const pair&r){ return{l.first%r.first,l.second%r.second}; }template pair& operator+=(pair&l,const pair&r){ l.first+=r.first; l.second+=r.second; return l; }template pair& operator-=(pair&l,const pair&r){ l.first-=r.first; l.second-=r.second; return l; }template pair& operator*=(pair&l,const pair&r){ l.first*=r.first; l.second*=r.second; return l; }template pair& operator/=(pair&l,const pair&r){ l.first/=r.first; l.second/=r.second; return l; }template pair& operator%=(pair&l,const pair&r){ l.first%=r.first; l.second%=r.second; return l; } } using namespace others; template using umap = unordered_map; template using uset = unordered_set; using uint = unsigned int; using ull = unsigned long long; using ll = long long; using pll = pair; using vpl = vector>; template using v = vector; template using vv = v>; template using vvv = v>; using vl = v; using vvl = vv; using vvvl = vvv; using vs = v; using vvs = vv; using vvvs = vvv; using Graph = vv; using Tree = vv; template using pq = priority_queue; template using pq_g = priority_queue,greater>; template bool chmin(T& a, T b){if(a > b){a = b; return true;} return false;} template bool chmax(T& a, T b){if(a < b){a = b; return true;} return false;} const string abc = "abcdefghijklmnopqrstuvwxyz"; const string ABC = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; const v dx={1,0,-1,0,1,1,-1,-1}; const v dy={0,1,0,-1,1,-1,1,-1}; const ll INF = 2e18; const double pi = 3.1415926535897932384626; namespace my_library{ namespace lib_of_graph{ template v topological_sort(vv& g){ ll N=ll(g.size()); v ret(0); v n(N); queue BFS; rep(i,N){ for(T x:g[i]){ n[x]++; } }rep(i,N){ if(n[i]==0){ ret.push_back(i); BFS.push(i); } }while(BFS.size()>0){ for(T x:g[BFS.front()]){ n[x]--; if(n[x]==0){ ret.push_back(x); BFS.push(x); } }BFS.pop(); }return ret; } } namespace base{ templatell tousa_sum(T a,U b,V c){//初項,交差,項数 return (b*(c-1)+a*2)*c/2; }templatevector get_rank(vector A){ ll r=0; map taiou; sort(all(A)); rep(i,A.size()){ r++; if(i>0&&A[i]==A[i-1]){ r--; }taiou[A[i]]=r; }rep(i,A.size()){ A[i]=taiou[A[i]]; } return A; } template string to_baseN(T base,U N){ if(N==0){ return "0"; } string ret=""; while(N>0){ ret+='0'+N%base; N/=base; }reverse(all(ret)); return ret; }template ll to_baseten(T a,string S){ ll k=1,ret=0; reverse(all(S)); rep(i,S.size()){ ret+=k*(S[i]-'0'); k*=a; }return ret; }template bool in(U a,T b, T c){//おそらく半開区間 return a<=b&&b bool in_grid(T H,T W,T a,T b){ return(in(0,a,H)&&in(0,b,W)); } } namespace data_struct{ template struct BIT{ int N; vector bit; function op=[](T a,T b){return a+b;}; function inv_op=[](T a,T b){return a-b;}; BIT(int n):N(n+1),bit(n+1,T()){} template BIT(int n,F operator_,G inv_operator_):N(n+1),bit(n+1,T()),op(operator_),inv_op(inv_operator_){} void add(int a,T b){//a番目にbを加算。0≦a0;i-=(i&-i)){ ret=inv_op(ret,bit[i]); }for(int i=b;i>0;i-=(i&-i)){ ret=op(ret,bit[i]); }return ret; }int lower_bound(T a){ int idx=0,r=1; while(N>r)r*=2; for(int len=r;len>0;len=len>>1){ if(idx+lenr)r*=2; for(int len=r;len>0;len=len>>1){ if(idx+len1){ ll s=0; ll p=minfactor[n]; if(p==1){ ret.push_back({n,1}); break; } while(n%p==0){ n/=p; s++; } ret.push_back({p,s}); }return ret; } }; vl prime_fact(ll N,vl prime){ vl ans(prime.size()); if(N<=0){ return ans; } rep(i,ll(prime.size())){//旧 while(N%prime[i]==0){ N/=prime[i]; ans[i]++; } }return ans; }ll modpow(ll a,ll b){//modはしない。語感 ll ret=1,tmp=a; while(b>0){ if(b&1){ ret*=tmp; } b>>=1; tmp*=tmp; }return ret; }template static_modint modpow(static_modint a,ll b){ static_modint ret=1,tmp=a; while(b>0){ if(b&1){ ret*=tmp; } b>>=1; tmp*=tmp; }return ret; }modint modpow(modint a,ll b){ modint ret=1,tmp=a; while(b>0){ if(b&1){ ret*=tmp; } b>>=1; tmp*=tmp; }return ret; } } namespace string_algorithm{ struct RollingHash{//ハッシュ衝突に気を付ける。心配なら2つ別のmodで持っとくといい long long int base=3290329LL; long long int mod=1000000007LL; vector hash; vector power; string S; RollingHash(const string& s):hash(s.size()+1),power(s.size()+1,1),S(s){ ll a=0; ll bas=1; for(long long int i=0;i<(long long int)(s.size());i++){ a*=base; a+=int(s[i]); a%=mod; hash[i+1]=a; bas*=base; bas%=mod; power[i+1]=bas; } } RollingHash(const string& s,const long long int& b,const long long int& m):base(b),mod(m),hash(s.size()+1),power(s.size()+1,1),S(s){ ll a=0; ll bas=1; for(long long int i=0;i<(long long int)(s.size());i++){ a*=base; a+=int(s[i]); a%=mod; hash[i+1]=a; bas*=base; bas%=mod; power[i+1]=bas; } }long long int get(int l,int r){ long long int ret=(hash[r]-(hash[l]*power[r-l])%mod+mod)%mod; return ret; } }; }namespace IO{ //入力 template void vin(T&... args){ ((cin>>args),...); return; }template void vvin(vector& hd,vector&... args){ rep(i,(long long int)hd.size()){ cin >> hd[i]; ((cin>>args[i]),...); }return; } //出力 template void println(const T&... args){ ((cout << args << " "),...); cout << endl; } } } void DFS(vvl& g,ll p,ll oya){ /*行く(ついた)ときの処理*/ for(ll x:g[p]){ if(x==oya){ continue; } DFS(g,x,p); }/*帰りの処理*/ } using namespace my_library::lib_of_graph; using namespace my_library::base;//旧 using namespace my_library::data_struct;//BITなど using namespace my_library::math; using namespace my_library::string_algorithm; using namespace my_library::IO; using mint = modint998244353; void solve(){ ll N,U=0; double Q1,Q2,Q3; cin >> N; v A(N); cin >> A; sort(all(A)); v B(N/2),C(N/2); if(N%2==0){ Q2=double(A[N/2]+A[N/2-1])/2; }else{ Q2=A[N/2]; }rep(i,N/2){ B[i]=A[i]; C[N/2-i-1]=A[N-i-1]; }if((N/2)%2==0){ Q1=double(B[N/4]+B[N/4-1])/2; Q3=double(C[N/4]+C[N/4-1])/2; }else{ Q1=B[N/4]; Q3=C[N/4]; }rep(i,N){ if(A[i]Q3+(Q3-Q1)*1.5){ U++; } }println(Q1,Q2,Q3,U); return; } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout << fixed << setprecision(15); ll T=1; //cin >> T; rep(i,T) solve(); }