#include <bits/stdc++.h>
#include <climits>
using namespace std;
template<class T>
using V = vector<T>;
template<class T>
using VV = V<V<T>>;
using ld = long double;
#define ll long long
using ull = unsigned ll;
using PLL = pair<ll, ll>;
using VLL = V<ll>;
using VB = V<bool>;
using VVB = VV<bool>;
using VVLL = VV<ll>;
using Gr = VVLL;
using MLL = map<ll, ll>;
#define UMLL unordered_map<ll, ll, custom_hash>
//using int128 = __int128;
//using double128 = __float128;
#define fast ios_base::sync_with_stdio(0); cin.tie(nullptr); cout.tie(nullptr); cerr.tie(nullptr);
#define INF LONG_MAX
#define MINF LONG_MIN
#define R &
#define CR const R
#define FORI(i, a, b) for(ll i = a, max##i = b; i < max##i; ++i)
#define FOR(i, n) FORI(i, 0, n)
#define RFORI(i, a, b) for(ll i = a, min##i = b; i >= min##i; --i)
#define RFOR(i, n) RFORI(i, n, 0)
#define FORA(i, a) for(auto i : a)
#define FORAR(i, a) for(auto R i : a)
#define FORACR(i, a) for(auto CR i : a)
#define ALL(obj) begin(obj), end(obj)
#define Count(q) while(q--)
#define OK cerr << "OK\n";
#define mp make_pair
#define pb push_back
//#define DEBUG
template<class T>
T sqr(T x)
{
return x * x;
}
void YES(bool g, ostream R os, bool upper = true)
{
if(g)
if(upper)
os << "YES";
else
os << "Yes";
else
if(upper)
os << "NO";
else
os << "No";
os << "\n";
}
template<class T>
void show(T CR t, ostream R os = cerr)
{
FORACR(i, t)
os << i << " ";
os << "\n";
}
template<class T>
void show2d(T CR t, ostream R os = cerr)
{
FORACR(i, t)
show(i, os);
os << "\n";
}
constexpr ll MOD = 1e9 + 7;
//constexpr ll len = 2e5 + 100;
constexpr ld PI = atanl(1.0L) * 4;
struct custom_hash
{
static uint64_t splitmix64(uint64_t x)
{
x += 0x9e3779b97f4a7c15;
x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
return x ^ (x >> 31);
}
size_t operator() (uint64_t x) const
{
static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
return splitmix64(x + FIXED_RANDOM);
}
};
//arr
void init() {}
void solve(istream R is, ostream R os)
{
ll n;
is >> n;
ll t = n * (n + 1) / 2;
if(t % 3)
{
os << "IMPOSSIBLE\n";
return;
}
ll s = t / 3 - 1; //s; s + 1; s + 2
cerr << s << "\n";
VLL a(3, 0);
VLL res(n);
RFOR(i, n - 1)
{
FOR(j, 3)
if(a[j] + i + 1 <= s + j)
{
a[j] += i + 1;
res[i] = j + 1;
break;
}
}
show(res, os);
}
void tester(istream R is, ostream R os)
{
fast
init();
ll q = 1;
//is >> q;
os << setprecision(999);
Count(q)
solve(is, os);
}
int main()
{
//ifstream in("input.txt");
//ofstream out("output.txt");
tester(cin, cout);
}