#include <bits/stdc++.h>
using namespace std;
int main() {
  int n, m;
  cin >> n >> m;
  vector<pair<int, int> > road;
  for (int a = (0); a < (m); a++) {
    int p, q;
    cin >> p >> q;
    if (p > q) swap(p, q);
    road.push_back(make_pair(p, q));
  }
  int field[101][101];
  for (int a = (0); a < (101); a++)
    for (int b = (0); b < (101); b++) field[a][b] = 10000;
  for (int a = (0); a < (m); a++)
    for (int b = (0); b < (m); b++) {
      int p = road[b].first;
      int q = road[b].second;
      int r = road[a].first;
      int s = road[a].second;
      if (p != r && p != s & q != r && q != s) {
        int count = 0;
        if (p < r && r < q) count++;
        if (p < s && s < q) count++;
        if (count == 1) {
          field[a + 1][b + 1] = 1;
          field[b + 1][a + 1] = 1;
        }
      }
    }
  int check[101];
  for (int j = 1; j <= m; j++)
    for (int i = 1; i <= m; i++)
      for (int k = 1; k <= m; k++)
        field[i][k] = min(field[i][k], field[i][j] + field[j][k]);
  int flag = 0;
  for (int a = 1; a <= m; a++)
    if (field[a][a] % 2 == 1) flag = 1;
  if (flag == 1)
    cout << "Impossible" << endl;
  else {
    int out[101];
    for (int a = (0); a < (101); a++) out[a] = -1;
    for (int a = 1; a <= m; a++)
      if (out[a] == -1) {
        out[a] = 0;
        for (int b = 1; b <= m; b++)
          if (field[a][b] < 200) {
            out[b] = field[a][b] % 2;
          }
      }
    int fflag = 0;
    for (int a = 1; a <= m; a++)
      for (int b = 1; b <= m; b++) {
        if (field[a][b] == 1)
          if (out[a] + out[b] != 1) fflag = 1;
      }
    if (fflag == 1)
      cout << "Impossible" << endl;
    else {
      for (int a = 1; a <= m; a++) {
        if (out[a] == 0)
          cout << "o";
        else
          cout << "i";
      }
      cout << endl;
    }
  }
  return 0;
}
