#include <bits/stdc++.h>
using namespace std;
const int INF = 2147483647;
const double PI = 3.141592653589793;
int n, m, i, j, tab[105][2], m1, m2, d1, d2, bat[105], k;
vector<int> graf[105];
bool vis[105];
bool da;
void dodaj(int a, int b) {
  graf[a].push_back(b);
  graf[b].push_back(a);
}
int next(int a) {
  if (a == n) return 1;
  return a + 1;
}
void dfs(int a, int b) {
  bat[a] = b;
  vis[a] = true;
  int i;
  for (i = 0; i < graf[a].size(); i++) {
    if (vis[graf[a][i]] && bat[graf[a][i]] == b) da = false;
    if (!vis[graf[a][i]]) dfs(graf[a][i], 1 - b);
  }
}
int main() {
  scanf("%d %d", &n, &m);
  for (i = 0; i < m; i++) {
    scanf("%d %d", &tab[i][0], &tab[i][1]);
    graf[i].resize(0);
    vis[i] = false;
  }
  for (i = 0; i < m; i++)
    for (j = i + 1; j < m; j++) {
      m1 = min(tab[i][0], tab[i][1]);
      m2 = max(tab[i][0], tab[i][1]);
      d1 = d2 = 0;
      for (k = next(m1); k != m2; k = next(k))
        if (k == tab[j][0] || k == tab[j][1]) d1++;
      for (k = next(m2); k != m1; k = next(k))
        if (k == tab[j][0] || k == tab[j][1]) d2++;
      if (d1 && d2) dodaj(i, j);
    }
  da = true;
  for (i = 0; i < m; i++)
    if (!vis[i]) dfs(i, 0);
  if (!da)
    printf("Impossible\n");
  else {
    for (i = 0; i < m; i++)
      if (bat[i] == 0)
        printf("i");
      else
        printf("o");
    printf("\n");
  }
  return 0;
}
