D. Ring Road 2


time limit per test



memory limit per test



input



output


n cities, which form the Silver ring — cities i and i + 1 (1 ≤ i < n) are connected by a road, as well as the cities n and 1. The goverment have decided to build m

Now the designers of the constructing plan wonder if it is possible to build the roads in such a way that no two roads intersect (note that the roads may intersect at their endpoints). If it is possible to do, which roads should be inside the ring, and which should be outside?


Input



n and m (4 ≤ n ≤ 100, 1 ≤ m ≤ 100). Each of the following m lines contains two integers ai and bi(1 ≤ ai, bi ≤ n, ai ≠ bi). No two cities will be connected by more than one road in the list. The list will not contain the roads which exist in the Silver ring.


Output



Impossible. Otherwise print m characters. i-th character should be i, if the road should be inside the ring, and o

Sample test(s)



input


4 2
1 3
2 4



output


io


input

6 3
1 3
3 5
5 1


output

ooo



思路:就三种情况,相交,一个在另一段里,在另一段外,每次选择一段相交的涂不同颜色,如果涂到已图色,且和需要图的颜色不同则无解


#include<iostream>
#include<cstring>
using namespace std;
const int mm=110;
int a[mm],b[mm],c[mm];
int n,m;
bool flag;
void dfs(int u,int col)
{
if(c[u]==-1)
{
c[u]=col;
for(int i=0;i<m;i++)///找相交
{
if(a[u]!=a[i]&&b[u]!=b[i])
{
if(a[u]<a[i]&&b[u]>a[i]&&b[u]<b[i])
dfs(i,col^1);
if(a[i]<a[u]&&b[i]>a[u]&&b[i]<b[u])
dfs(i,col^1);
}
}
}
else if(c[u]^col)flag=0;
}
int main()
{
while(cin>>n>>m)
{ flag=1;
memset(c,-1,sizeof(c));
for(int i=0;i<m;i++)
{
cin>>a[i]>>b[i];a[i]--,b[i]--;
if(a[i]>b[i])a[i]^=b[i],b[i]^=a[i],a[i]^=b[i];///a<b
}
for(int i=0;i<m;i++)
if(c[i]==-1)
dfs(i,0);
if(flag)
for(int i=0;i<m;i++)
cout<<(c[i]?'i':'o');
else cout<<"Impossible\n";
cout<<"\n";
}
}