#include <iostream>
using namespace std;

void solve() {
    int x;
    cin>>x;
    if (x<36 && x%3!=0) {
        cout << "Baka!" << endl;
        return;
    }
    for (int i=1;i<=x/3 && i*3<=36;i++) {
        cout << 3*i-2 << " " << 3*i << " " << 3*i-1 << " ";
    }
    if (x==37) cout << 37;
    else if (x==38) cout << 37 << " " << 38;
    else if (x>=39) {
        cout << 38 << " " << 37 << " ";

        for (int i=0;i<(x-39)/3;i++) {
            cout << 3*i+40 << " " << 3*i+41 << " " << 3*i+39 << " ";
        }

        if ((x-39)%3==0) cout << x;
        else if ((x-40)%3==0) cout << x << " " << x-1;
        else cout << x-1 << " " << x << " " << x-2;
    }
}

int main() {
    solve();
    return 0;
}
// 3
// 37
// 333667

本蒟蒻第一次写题解,浅浅尝试一下。

我认为我的代码应该比较好理解,我们可以先写一段代码(比如for循环1-999999999的数,如果余数为0就输出)找到999999999的质因子(3,37,333667)。

多列几项容易知道37以及之后的x都可以构造出来(38 37 40还余留一个39,39又可以控制两个数,再加两个数仍然可控,再加三个又一定会有3的倍数的数)。故只有x < 36 && x % 3 != 0的情况构造不出来。

x=37,x=38比较特殊,为了方便我后续构造周期性,分情况讨论,输出这两个值。

接下来就好办了,在x>=39的情况下(38 37,40 41 39,43 44 42,46 47 45,......)呈现周期性规律。只要3个3个的并且让小于x的3的倍数的数(这个数一定有)排最后就好了。