#include <bits/stdc++.h>
using namespace std;
class Poly {
 private:
  vector<int> arr;
  inline void trim() {
    while (!arr.empty() and arr.back() == 0) arr.pop_back();
  }

 public:
  Poly() : arr(vector<int>()) {}
  Poly(vector<int> a) : arr(a) {}
  Poly operator+(const Poly& a) const {
    vector<int> ret;
    ret.resize(max(a.arr.size(), arr.size()), 0);
    for (size_t i = 0; i < arr.size(); i++) ret[i] += arr[i];
    for (size_t i = 0; i < a.arr.size(); i++) ret[i] += a.arr[i];
    Poly retret = Poly(ret);
    retret.trim();
    return retret;
  }
  Poly operator+=(const Poly& a) {
    arr.resize(max(arr.size(), a.arr.size()), 0);
    for (size_t i = 0; i < a.arr.size(); i++) arr[i] += a.arr[i];
    trim();
    return *this;
  }
  Poly operator*(const Poly& a) const {
    Poly ret;
    for (size_t i = 0; i < a.arr.size(); i++) {
      vector<int> tmp;
      tmp.resize(i, 0);
      for (auto j : arr) tmp.push_back(j * a.arr[i]);
      ret += Poly(tmp);
    }
    ret.trim();
    return ret;
  }
  Poly operator*=(const Poly& a) {
    *this = *this * a;
    return *this;
  }
  void modulo(int x) {
    for (auto& i : arr) i %= x;
    trim();
  }
  vector<int> get_coefficients() { return arr; }
  friend ostream& operator<<(ostream& ss, const Poly& x) {
    for (size_t i = 0; i < x.arr.size(); i++) {
      ss << x.arr[i] << "x^" << i << (i == x.arr.size() - 1 ? "" : " + ");
    }
    return ss;
  }
};
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n;
  cin >> n;
  Poly pre = Poly({1}), cur = Poly({0, 1});
  for (int i = 2; i <= n; i++) {
    Poly tmp = Poly({0, 1}) * cur + pre;
    pre = cur;
    cur = tmp;
  }
  pre.modulo(2);
  cur.modulo(2);
  vector<int> mu = cur.get_coefficients();
  vector<int> zhi = pre.get_coefficients();
  cout << mu.size() - 1 << '\n';
  for (size_t i = 0; i < mu.size(); i++)
    cout << mu[i] << " \n"[i == mu.size() - 1];
  cout << zhi.size() - 1 << '\n';
  for (size_t i = 0; i < zhi.size(); i++)
    cout << zhi[i] << " \n"[i == zhi.size() - 1];
  return 0;
}
