#include "encoder.h"
#include "encoderlib.h"
void encode(int N, int M[]){
if(N <= 32){
for(int i = 0;i<N;i++){
for(int bit = 0;bit<8;bit++){
if(M[i] & (1 << bit)) send(i * 8 + bit);
}
}
}else{
for(int i = 0;i<N;i++){
int a = M[i] % 4, b = (M[i] / 4) % 4, c = (M[i] / 16) % 4, d = (M[i] / 64) % 4;
for(int j = 0;j<a;j++) send(i * 4);
for(int j = 0;j<b;j++) send(i * 4 + 1);
for(int j = 0;j<c;j++) send(i * 4 + 2);
for(int j = 0;j<c;j++) send(i * 4 + 3);
}
}
}
#include "decoder.h"
#include "decoderlib.h"
void decode(int N, int L, int X[]){
int ans[N];
for(int i = 0;i<N;i++) ans[i] = 0;
if(N <= 32){
for(int i = 0;i<L;i++){
int id = X[i] / 8, c = X[i] % 8;
ans[id] += (1 << c);
}
for(int i = 0;i<N;i++) output(ans[i]);
}else{
for(int i = 0;i<L;i++){
int id = X[i] / 4, c = X[i] % 4;
int cc = 1;
for(int j = 0;j<c;j++) cc *= 4;
ans[id] += cc;
}
for(int i = 0;i<N;i++) output(ans[i]);
}
}