#include <bits/stdc++.h>
using namespace std;
long long n, piv, sebelah, luas[1010];
vector<pair<long long, long long> > atas, bawah;
long long tanya(long long t, long long i, long long j, long long k) {
  printf("%lld %lld %lld %lld\n", t, i, j, k);
  fflush(stdout);
  long long resp;
  cin >> resp;
  return resp;
}
int main() {
  cin >> n;
  piv = 1;
  sebelah = 2;
  for (long long i = 3; i <= n; i++) {
    long long orientation = tanya(2, piv, sebelah, i);
    if (orientation == -1) {
      sebelah = i;
    }
  }
  long long jauh = 2;
  if (sebelah == 2) jauh = 3;
  for (long long i = 2; i <= n; i++) {
    if (i == sebelah) continue;
    luas[i] = tanya(1, piv, sebelah, i);
    if (luas[i] > luas[jauh]) jauh = i;
  }
  for (long long i = 2; i <= n; i++) {
    if (i == sebelah || i == jauh) continue;
    long long orientation = tanya(2, piv, jauh, i);
    if (orientation == 1) {
      atas.push_back({luas[i], i});
    } else {
      bawah.push_back({luas[i], i});
    }
  }
  sort(atas.rbegin(), atas.rend());
  sort(bawah.begin(), bawah.end());
  cout << "0 " << piv << " " << sebelah;
  for (long long i = 0; i < bawah.size(); i++) {
    cout << " " << bawah[i].second;
  }
  cout << " " << jauh;
  for (long long i = 0; i < atas.size(); i++) {
    cout << " " << atas[i].second;
  }
  cout << "\n";
  fflush(stdout);
  return 0;
}
