#include <bits/stdc++.h>
using namespace std;
template <typename t>
void mi(t& a, const t& b) {
  a = min(a, b);
}
template <typename t>
void ma(t& a, const t& b) {
  a = max(a, b);
}
constexpr int si = 1024 * 1024, si_log = 10 + 10,
              mod = static_cast<int>(1e9) + 7, partition_size = 400;
template <typename t, typename u>
void ad(t& a, const u& b) {
  a += b;
  if (mod <= a) a -= mod;
}
template <typename t, typename u>
void mu(t& a, const u& b) {
  a = (a * b) % mod;
}
inline int64_t power(int64_t bas, int64_t p) {
  int64_t r = 1;
  while (p) {
    if (p & 1) r = (r * bas) % mod;
    bas = (bas * bas) % mod;
    p >>= 1;
  }
  return r;
}
constexpr long double eps = 1.0e-9;
int n, m, k, ar[si], br[si], cr[2][si];
char bar[si], car[si];
vector<int> gr[si], gr2[si];
void fi(const int max_deg) {
  for (int j = 0; j <= max_deg + 2; ++j) {
    br[j] = 0;
  }
  for (int j = 0; j <= max_deg; ++j) {
    br[j] = cr[1][j];
    if (j) {
      br[j] = (br[j] + cr[0][j - 1]) % 2;
    }
  }
}
int64_t sol() {
  auto r = 0 * numeric_limits<int64_t>::max();
  cr[0][1] = 1;
  cr[1][0] = 1;
  for (int i = 2; i <= n; ++i) {
    fi(i);
    for (int j = 0; j <= i; ++j) {
      cr[1][j] = cr[0][j];
      cr[0][j] = br[j];
    }
  }
  int md0 = 0, md1 = 0;
  for (int j = 0; j <= n; ++j) {
    if (cr[0][j]) md0 = j;
    if (cr[1][j]) md1 = j;
  }
  cout << md0 << '\n';
  for (int j = 0; j <= md0; ++j) {
    cout << ' ' << cr[0][j];
  }
  cout << '\n' << md1 << '\n';
  for (int j = 0; j <= md1; ++j) {
    cout << ' ' << cr[1][j];
  }
  cout << '\n';
  return r;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  while (1 == scanf("%d", &n)) {
    sol();
    break;
  }
  return 0;
}
