#include "router.h"
int nn;
const RoutingTableEntry *b;
void init(int n, int q, const RoutingTableEntry *a) {
for (int i=0;i<n;i++){
unsigned t;
if (a[i].len>0){
t=a[i].addr>>(32-a[i].len)<<(32-a[i].len);
}else{
t=0;
}
if (a[i].addr!=t){
while(1){}
}
}
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;
}
}
if (k<=1){
addr=0;
}else{
addr>>=(33-k);
addr<<=(33-k);
}
}
return 0;
}