# Author: Manfred Scheucher
# Date  : 01.06.2015 

from sys import argv

def partition(n,maxk=None):
	assert(n>=0)
	if n == 0: 
		yield []
	else:
		if maxk==None: maxk=n
		for k in range(min(n,maxk),0,-1):
			for P in partition(n-k,k):
				yield [k]+P


def intersection_valid(A,B):
	inter = set(A) & set(B)
	return len(inter) == 1


def conj_partition(n,P):
	cP = [len([p for p in P if p>i]) for i in range(n)]
	return [p for p in cP if p > 0]


minn = int(argv[1])
maxn = int(argv[2]) if len(argv)>2 else minn
for n in [minn..maxn]:

	ct = 0
	for P in partition(n):
		cP = conj_partition(n,P)
		if intersection_valid(P,cP):
			ct+=1

	print n,ct