#include <iostream>
using namespace std;
 
// Узел. Используется в очереди
struct node {
    bool val;   // Значение узла
    node *next; // Указатель на следующий узел
    node(int v, node *n = NULL) {
        val = v;
        next = n;
    }
};
 
// Очередь. Используется как представление стопки
struct Queue {
    node *head;
    Queue(node *h = NULL) {
        head = h;
    }
    void push(bool v) { // Добавить элемент в очередь
        head = new node(v, head);
    }
    bool pop() {    // Изъять элемент из очереди
        if(head != NULL && (head -> next) != NULL) {
            node *i = head;
            node *p = i;
            while(i -> next != NULL) {
                p = i;
                i = i -> next;
            }
            bool v = i -> val;
            p -> next = NULL;
            delete i;
            return v;
        } else {
            node *n = head;
            bool v = head -> val;
            head = head -> next;
            delete n;
            return v;
        }
    }
};
 
int main() {
    int n;  // Количество карточек в стопке
    cin >> n;
    Queue cards;
    bool t = n % 2; // Цвет текущей карточки. Инициализируется цветом последней выкладываемой карточки
    for(int i = 0; i < n - 1; i++) { // Собираем стопку, не добавляя верхнюю карточку
        cards.push(t);  // Добавляем текущую карточку
        cards.push(cards.pop());    // Перекладываем карточку из-под стопки наверх
        t = !t; // Меняем цвет текущей карточки
    }
    cards.push(1);  // Добавляем белую карточку наверх
    for(int i = 0; i < n; i++)   // Выводим полученную стопку
        cout << cards.pop();
    return 0;
}