#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const long long linf = 1e18;
const int N = 200 + 10;
const double eps = 1e-5;
const int mo = 1e9 + 7;
int n;
struct pol {
  int d;
  int a[N];
  void operator=(pol &b) {
    d = b.d;
    memset(a, 0, sizeof a);
    for (int i = 0; i <= d; i++) a[i] = b.a[i];
  }
} A, B, C, D;
void mul(pol &b) {
  for (int i = b.d; i >= 0; i--) {
    b.a[i + 1] = b.a[i];
  }
  b.a[0] = 0;
  b.d++;
}
void add(pol &b, pol &c) {
  for (int i = 0; i <= b.d; i++) b.a[i] += c.a[i];
}
void flip(pol &b) {
  for (int i = 0; i <= b.d; i++) b.a[i] = -b.a[i];
}
void sub(pol &b, pol &c) {
  for (int i = 0; i <= b.d; i++) b.a[i] -= c.a[i];
}
bool ok(pol &b) {
  for (int i = 0; i <= b.d; i++)
    if (b.a[i] > 1 || b.a[i] < -1) return 0;
  return 1;
}
void print(pol &b) {
  printf("%d\n", b.d);
  for (int i = 0; i <= b.d; i++) {
    printf("%d ", b.a[i]);
  }
  printf("\n");
}
int main() {
  std::ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    if (i == 1) {
      A.d = 1, A.a[1] = 1;
      B.d = 0, B.a[0] = 1;
    } else {
      D = A;
      C = D;
      mul(C);
      add(C, B);
      bool flag = 0;
      if (!ok(C)) {
        flag = 1;
        sub(C, B);
        sub(C, B);
      }
      A = C, B = D;
    }
  }
  print(A);
  print(B);
  return 0;
}
