#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int>> adj[200005];
int psa[200005];
bool seen[200005];
bool ans[200005];
vector<int> st;
int N, M;
void dfs(int n, int root) {
seen[n] = 1;
if (n == root) {
for (int i:st) ans[i] = 1;
for (int i = 1; i <= M; i ++) cout << ans[i];
cout << "\n";
exit(0);
}
for (auto [i, j]:adj[n]) if (!seen[i]) {
st.push_back(j);
dfs(i, root);
st.pop_back();
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> N >> M;
for (int i = 1; i <= M; i ++) {
int a, b;
cin >> a >> b;
if (a <= b) {
b ++;
adj[a].push_back({b, i});
psa[a] ++;
psa[b] --;
} else {
b ++;
adj[a].push_back({N+b, i});
psa[a] ++;
psa[N+b] --;
}
}
for (int i = 1; i <= 2*N; i ++) {
psa[i] += psa[i-1];
}
for (int i = 1; i <= N; i ++) {
if (psa[i] + psa[i+N] <= 1) {
cout << "impossible";
return 0;
}
if (psa[i] + psa[i+N] >= 3) {
adj[i+1].push_back({i, 0});
adj[i+N+1].push_back({i+N, 0});
}
}
// for (int i = 1; i <= 2*N; i++) {
// for (auto [j, k]:adj[i]) {
// cout << i << " " << j << "\n";
// }
// }
for (int i = 1; i <= N; i ++) {
memset(seen, 0, sizeof(seen));
dfs(i, i+N);
}
cout << "impossible";
}