#include "router.h"
int nn;
const RoutingTableEntry *b;
void init(int n, int q, const RoutingTableEntry *a) {
b=a;nn=n;
}
unsigned query(unsigned addr) {
for (int k=32;k>=0;k--){
int lo=nn-1,hi=-1;
while (lo-hi>1){
int mid=(lo+hi)/2;
if (b[mid].addr>=addr) lo=mid;
else hi=mid;
}
for (int i=lo;i<nn;i++){
if (b[i].addr==addr){
if (b[i].len==k) return b[i].nexthop;
}else{
break;
}
}
addr&=~(1<<((k-1)/8*8+7-(k-1)%8));
}
return 0;
}