粉丝群
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M
64bit IO Format: %lld

题目描述

在wjyyy粉丝群中,除了wjy一共有n个人,编号为1到n。

大家准备一起膜爆wjy,也就是说复读2n次消息,并且由于这n个人在膜wjy上是统一的,所以每个人都必须至少复读一次。

wjy想要禁言掉一些人,但是这里是wjy粉丝群,不能随便禁言膜wjy的人,于是wjy定下一个规则:

> 如果这n个人,能够分成两组,使得两个组中所有人的复读次数的加和是相同的,那么这n个人都要被禁言。

这n个人开始讨论,他们不想被暴政。

那么问题来了,有多少种复读的分配方法,使得wjyyy没法把这n个人分成满足以上条件的两组?

然而wjy的粉丝太多了,您只要输出分配方法的种数以及这些分配方法中字典序第k小的分配方式的异或和即可。

注意:如果有两个人,则复读次数分别为(1,3)与复读次数分别为(3,1) 算两种不同的分配方式。

输入描述:

输入一行,两个正整数表示和k。

同时保证字典序第k小的方案一定存在。

输出描述:

输出两行,第一行是满足条件的方式的个数,第二行是第k个满足条件的方式的xor和。
示例1

输入

复制
3 2

输出

复制
4
4

备注:

答案可能较大。