#include<map>
#include<bitset>
#include<cmath>
using namespace std;
int compute1(int N)
{
bitset<32>bit(N^(N-1));
return bit.count();
}
map<int,int> input(map<int,int>store)
{
//map<int,int>store;
int M,N;
int sum=0;
cout<<"please input your data M N ";
while(cin>>M>>N)
{
if( (pow(2,M)-1)>=N)
store.insert(make_pair(M,N));
else cout<<"输入不合法";
cin.clear();
fflush(stdin);
}
return store;
}
int sum_(int N)
{
int sum1=0;
while((N^(N-1))>=0)
{
sum1+=compute1(N);
--N;
}
return sum1;
}
void output(map<int,int>store )
{
map<int,int>::iterator it=store.begin();
while(it!=store.end())
{
cout<<sum_(it->second)<<endl;
++it;
}
}
void outputmutimap(multimap<int,int> store)
{
typedef multimap<int,int>::iterator itstore;
itstore it1=store.begin();
pair<itstore,itstore>pos;
while(it1!=store.end())
{
pos=store.equal_range(it1->first);
while(pos.first!=pos.second)
{
cout<<pos.first->second<<" "<<sum_(pos.first->second)<<endl;
++pos.first;
}
it1=pos.first;
}
}
multimap<int,int> inputmultimap(multimap<int,int>store)
{
int M,N;
cout<<"请输入M,N";
while (cin>>M>>N)
{ if( (pow(2,M)-1)>=N)
store.insert(make_pair(M,N));
else cout<<"输入不合法";
cin.clear();
fflush(stdin);
}
return store;
}
int main(){
// map<int,int>mp;
//output(input(mp));
multimap<int,int>mp1;
outputmutimap(inputmultimap(mp1));
return 0;
}