#include <stdio.h>

int partition(int x,int *y) {
	if (x == 0) {
		return 0;
	}
	//获取整数的位数
	int count = 0;
	int n = 0;
	n = x;
	while (n) {
		n = n / 10;
		count++;
	}
	//给数组填值
	for (int i = count - 1; i >= 0; i--) {
		y[i] = x % 10;
		x = x / 10;
	}
	//把整数的位数返回
	return count;
}
int main() {
	int arr[10];
	int left_num = 0;
	int right_num = 0;
	int narcissus_num = 0;
	//接收边界
	scanf("%d %d", &left_num, &right_num);
	for (int i = left_num; i <= right_num; i++) {
		//把每个整数拆分,并且获取整数的位数
		int count = partition(i, arr);
		int sum = 0;
		//printf("%d\n", arr[i]);
		//计算这个数
		for (int j = 0; j < count; j++) {
			sum = sum + arr[j] * arr[j] * arr[j];
		}
		//判断是不是水仙
		if (sum == i) {
			//打印水仙数,并且水仙个数加一
			printf("%d ", i);
			narcissus_num++;
		}
	}
	if (0 == narcissus_num) {
		printf("no");
	}
	return 0;
}