#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int C = 26;
void add(int& x, int y) {
  x += y;
  while (x >= MOD) x -= MOD;
  while (x < 0) x += MOD;
}
int fix(int x) {
  while (x >= MOD) x -= MOD;
  while (x < 0) x += MOD;
  return x;
}
int pw(int a, int b) {
  int ret = 1;
  while (b) {
    if (b & 1) ret = 1ll * ret * a % MOD;
    b >>= 1;
    a = 1ll * a * a % MOD;
  }
  return ret;
}
const int MAXN = 1e6 + 10;
pair<vector<int>, vector<int>> rec(int n) {
  if (n == 0) {
    return {{1}, {0}};
  }
  auto vec = rec(n - 1);
  swap(vec.first, vec.second);
  for (int a : {-1, 1}) {
    vector<int> maybe = vec.first;
    while (maybe.size() <= vec.second.size()) maybe.insert(maybe.begin(), 0);
    for (int& x : maybe) x *= a;
    for (int i = 0; i < (int)vec.second.size(); i++) maybe[i] += vec.second[i];
    bool ok = 1;
    for (int x : maybe)
      if (abs(x) > 1) ok = 0;
    if (ok) {
      vec.first = maybe;
      break;
    }
  }
  for (int x : vec.first) assert(abs(x) <= 1);
  return vec;
}
void solve() {
  int n;
  cin >> n;
  auto ans = rec(n);
  reverse(ans.first.begin(), ans.first.end());
  reverse(ans.second.begin(), ans.second.end());
  cout << ans.first.size() - 1 << "\n";
  for (int x : ans.first) cout << x << " ";
  cout << "\n";
  cout << ans.second.size() - 1 << "\n";
  for (int x : ans.second) cout << x << " ";
  cout << "\n";
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int te = 1;
  for (int w = 1; w <= te; w++) {
    solve();
  }
  return 0;
}
