#include <iostream>
using namespace std;
int main() {
// 升序输出表明从1开始至n结束,每次递增1,从中剔除4的倍数或包含数字4的
// 最大输入1e5说明最多有6位数字,用6个变量分别存储6个数字位,a用来判断是否为4的倍数
// 解题思路就是每次递增后,去判断这6个变量是否为4,以及a是否为4,如果是的话就不要输出数字
short a1,a2,a3,a4,a5,a6, a;
a1 = 0; a2 = 0; a3 = 0; a4 = 0; a5 = 0; a6 = 0; a = 0; // a1表示个位,a2表示十位 ...
int n;
cin >> n; // 把数接收进来
for(int i = 1; i <= n; i++)
{
a++;a1++; // 只需要a和个位数a1自增
if(a1 == 10) // 个位逢10进1
{
a1 = 0;
a2 += 1;
}
if(a2 == 10) // 十位逢10进1
{
a2 = 0;
a3 += 1;
}
if(a3 == 10)
{
a3 = 0;
a4 += 1;
}
if(a4 == 10)
{
a4 = 0;
a5 += 1;
}
if(a5 == 10)
{
a5 = 0;
a6 += 1;
}
if(a == 4) // 每次a为4表示当前数字i是4的倍数,此时不要打印数字i
{
a = 0; // 不要忘记重置a
continue;
}
if(a1==4 || a2==4 || a3==4 || a4==4 || a5==4 || a6==4) continue; // 若有任意位出现4则不打印
cout << i << endl;
}
}
// 64 位输出请用 printf("%lld")