#include "encoder.h"
#include "encoderlib.h"
#include <bits/stdc++.h>
void encode(int n, int a[])
{
if (n<=32)
{
for (int i=0;i<n;i++)
{
int ad=(i/2)*16;
if (i%2)
{
for (int j=0;j<4;j++) send(ad+a[i]/16);
for (int j=0;j<8;j++) send(ad+a[i]%16);
}
else
{
send(ad+a[i]/16);
send(ad+a[i]%16), send(ad+a[i]%16);
}
}
}
else
{
int id=0;
for (int i=0;i<n;i++)
{
for (int x=64;x>=1;x/=4,id++)
{
for (int c=0;c<a[i]/x;c++)
send(id);
a[i]%=x;
}
}
}
}
#include "decoder.h"
#include "decoderlib.h"
void decode(int n, int m, int a[])
{
int cnt[256]={};
for (int i=0;i<m;i++) cnt[a[i]]++;
if (n<=32)
{
for (int i=0;i<n;i++)
{
int ad=(i/2)*16, val=0;
if (i%2)
{
for (int j=ad;j<ad+16;j++)
{
if (cnt[j]&4) val+=(j-ad)*16;
if(cnt[j]&8) val+=j-ad;
}
}
else
{
for (int j=ad;j<ad+16;j++)
{
if (cnt[j]&1) val+=(j-ad)*16;
if(cnt[j]&2) val+=j-ad;
}
}
output(val);
}
}
else
{
int id=0;
for (int i=0;i<n;i++)
{
int val=0;
for (int x=64;x>=1;x/=4,id++)
val+=cnt[id]*x;
output(val);
}
}
}