#include <bits/stdc++.h>
using namespace std;
struct pol {
  vector<int> x;
  pol() {}
  pol(const pol& z) {
    for (int i = 0; i < z.x.size(); i++) {
      x.push_back(z.x[i]);
    }
  }
  pol mult() {
    pol res;
    res.x.push_back(0);
    for (int i = 0; i < x.size(); i++) {
      res.x.push_back(x[i]);
    }
    return res;
  }
  pol mult1() {
    pol res;
    res.x.push_back(0);
    for (int i = 0; i < x.size(); i++) {
      res.x.push_back(-x[i]);
    }
    return res;
  }
  pol add(pol& z) {
    pol res;
    for (int i = 0; i < max(x.size(), z.x.size()); i++) {
      res.x.push_back(0);
    }
    for (int i = 0; i < x.size(); i++) {
      res.x[i] += x[i];
    }
    for (int i = 0; i < z.x.size(); i++) {
      res.x[i] += z.x[i];
    }
    return res;
  }
};
pol a, b;
int n;
void ch() {
  if (a.x.back() != 1 || b.x.back() != 1) {
    return;
  }
  cout << a.x.size() - 1 << endl;
  for (int i = 0; i < a.x.size(); i++) {
    cout << a.x[i] << " ";
  }
  cout << endl;
  cout << b.x.size() - 1 << endl;
  for (int i = 0; i < b.x.size(); i++) {
    cout << b.x[i] << " ";
  }
  exit(0);
}
bool ch1() {
  for (int i = 0; i < a.x.size(); i++) {
    if (abs(a.x[i]) > 1) return 0;
  }
  return 1;
}
void go(int i) {
  if (!ch1()) return;
  if (i == n) {
    ch();
    return;
  }
  pol t = a;
  pol t1 = b;
  a = a.mult();
  a = a.add(b);
  b = t;
  go(i + 1);
  a = t;
  b = t1;
  a = a.mult1();
  a = a.add(b);
  b = t;
  go(i + 1);
}
int main() {
  cin >> n;
  a.x.push_back(-1);
  b.x.push_back(0);
  go(0);
  a.x.clear();
  b.x.clear();
  a.x.push_back(1);
  b.x.push_back(0);
  go(0);
  cout << -1;
  return 0;
}
