#include<cstdio>
#include<algorithm>
#include<functional>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cmath>
using namespace std;
#define MAXN (200000+10)
#define MAXM (300000+10)
int edge[MAXM],pre[MAXM],next[MAXM],size=0;
void addedge(int u,int v)
{
edge[++size]=v;
next[size]=pre[u];
pre[u]=size;
}
int t[MAXN],tim=0,dfs[MAXN];
int s[MAXN],tot=0,n,m;
int kind=0,h[MAXN];
bool b[MAXN],numk[MAXN];
void tar(int u)
{
t[u]=dfs[u]=++tim;b[u]=1;
s[++tot]=u;
for (int p=pre[u];p;p=next[p])
{
int &v=edge[p];
if (!b[v]) tar(v),dfs[u]=min(dfs[u],dfs[v]);
else if (!h[v]) dfs[u]=min(dfs[u],t[v]);
}
if (dfs[u]==t[u])
{
kind++;
bool flag=0;
while (s[tot]!=u) h[s[tot--]]=kind,flag=1;
h[s[tot--]]=kind;
numk[kind]=flag;
}
}
int main()
{
freopen("cp.in","r",stdin);
freopen("cp.out","w",stdout);
scanf("%d%d",&n,&m);
memset(pre,0,sizeof(pre));
memset(b,0,sizeof(b));
memset(h,0,sizeof(h));
for (int i=1;i<=n;i++) addedge(2*i-1,2*i);
for (int i=1;i<=m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
addedge(v,u);
}
for (int i=2;i<=2*n;i+=2)
{
if (!b[i]) tar(i);
if (numk[h[i]]) printf("~\n");
else printf("@\n");
}
return 0;
}