#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")