// Slower C++ solution:
#include<cstdio>

#include<stack>

#include<ctime>

using namespace std;

#define N 1050

#define M 200500

int head[N],cnt,scc[N],dfn[N],low[N],f[N][13],s[M][2],as[M],vl[N],ct,ct2,vis[N][N],id[N],ct1,dep[N],is[N],n,m,ct3;

struct edge{int t,next,id;}ed[M];

void adde(int f,int t,int id){ed[++cnt]=(edge){t,head[f],id};head[f]=cnt;}

stack<int> tp,tp2,v[N],tp3;

void dfs1(int u)

{

	dfn[u]=low[u]=++ct1;

	tp.push(u);

	for(int i=head[u];i;i=ed[i].next)

	{

		if(!dfn[ed[i].t])dfs1(ed[i].t),low[u]=min(low[u],low[ed[i].t]);

		else if(!scc[ed[i].t])low[u]=min(low[u],dfn[ed[i].t]);

	}

	if(dfn[u]==low[u])

	{

		int s=tp.top(),id=++ct2;tp.pop();

		scc[s]=id;

		while(s!=u)

		s=tp.top(),tp.pop(),scc[s]=id;

	}

}

void dfs2(int u,int s){for(int i=head[u];i;i=ed[i].next)if(!vis[s][ed[i].t])vis[s][ed[i].t]=1,dfs2(ed[i].t,s);else vis[s][ed[i].t]++;}

int LCA(int x,int y){if(dep[x]<dep[y])x^=y^=x^=y;for(int i=10;i>=0;i--)if(dep[x]-dep[y]>=(1<<i))x=f[x][i];if(x==y)return x;for(int i=10;i>=0;i--)if(f[x][i]!=f[y][i])x=f[x][i],y=f[y][i];return f[x][0];}

void dfs3(int u,int fa)

{

	dfn[u]=1;dep[u]=dep[fa]+1;f[u][0]=fa;vl[u]=0;for(int i=1;i<=10;i++)f[u][i]=f[f[u][i-1]][i-1];

	for(int i=head[u];i;i=ed[i].next)

	if(!dfn[ed[i].t])tp.push(ed[i].id),dfs3(ed[i].t,u),vl[u]+=vl[ed[i].t];

	else{int s=LCA(u,ed[i].t);vl[u]++;vl[s]--;tp2.push(ed[i].id);}

}

bool check(int x)

{

	for(int i=1;i<=n;i++)dfn[i]=scc[i]=head[i]=0;

	cnt=0;ct2=0;

	for(int i=1;i<=m;i++)if(i!=x)adde(s[i][0],s[i][1],-1);else adde(s[i][1],s[i][0],-2);

	for(int i=1;i<=n;i++)if(!dfn[i])dfs1(i);

	return ct2!=ct3;

}

int main()

{

	scanf("%d%d",&n,&m);

	for(int i=1;i<=m;i++)scanf("%d%d",&s[i][0],&s[i][1]),adde(s[i][0],s[i][1],1);

	for(int i=1;i<=n;i++)if(!dfn[i])dfs1(i);ct3=ct2;

	for(int i=1;i<=n;i++)head[i]=0;cnt=0;

	for(int i=1;i<=m;i++)if(scc[s[i][0]]!=scc[s[i][1]])adde(scc[s[i][0]],scc[s[i][1]],-3);

	for(int i=1;i<=ct2;i++)dfs2(i,i);

	for(int i=1;i<=n;i++)head[i]=0;cnt=0;

	for(int i=1;i<=m;i++)if(scc[s[i][0]]!=scc[s[i][1]])as[i]=vis[scc[s[i][0]]][scc[s[i][1]]]>1;else v[scc[s[i][0]]].push(i);

	for(int i=1;i<=ct2;i++)

	{

		for(int j=1;j<=n;j++)dfn[j]=0,head[j]=0;

		ct1=0;cnt=0;

		for(int j=1;j<=n;j++)if(scc[j]==i)id[j]=++ct1;

		while(!v[i].empty())

		{

			int q=v[i].top();v[i].pop();

			adde(id[s[q][0]],id[s[q][1]],q);

		}

		dfs3(1,0);

		while(!tp2.empty())

		{

			int st=tp2.top();tp2.pop();

			int l=id[s[st][0]],r=id[s[st][1]];

			r=LCA(l,r);

			int fg=0;

			while(l!=r)fg|=(vl[l]==1),l=f[l][0];

			as[st]=fg;

		}

	}

	while(!tp.empty()){int st=tp.top();tp.pop();as[st]=check(st);}

	for(int i=1;i<=m;i++)printf("%s\n",as[i]?"diff":"same");

}///

// Faster C++ solution for the same problem (measured speedup: 1.230802713468197x):
#include<bits/stdc++.h>

#define lowbit(i) (i&(-i))

#define ll long long

#define mid ((l+r)>>1)

using namespace std;

const int N=1005,M=2e5+5;

int n,m; vector<int> Ed[N];

struct st

{

	int from,nxt,to,ans;

}ed[M]; int head[N],num;

void add(int from,int to)

{

	ed[++num].to=to,ed[num].from=from;

	ed[num].nxt=head[from];

	head[from]=num;

}

int stk[N],top,dfn[N],low[N],refl[N],t,numb; bool cn[N];

void tarjan(int x)

{

	dfn[x]=low[x]=++numb,stk[++top]=x,cn[x]=1;

	for(int u,i=head[x];i;i=ed[i].nxt)

	{

		u=ed[i].to;

		if(!dfn[u])tarjan(u),low[x]=min(low[x],low[u]);

		else if(cn[u])low[x]=min(low[x],dfn[u]);

	}

	if(dfn[x]==low[x])

	{

		++t;

		while(stk[top]!=x)

			refl[stk[top]]=t,cn[stk[top]]=0,--top;

		refl[stk[top]]=t,cn[stk[top]]=0,--top;

	}

}

int fir[2][N];

void dfs(int x,int id,int typ)

{

	fir[typ][x]=id;

	for(auto u : Ed[x])

		if(!fir[typ][u])dfs(u,id,typ);

}

int E[M],tot;

int main()

{

	//freopen("bigcycle_0.in","r",stdin);

	//freopen("0709D.out","w",stdout);

	int u,v; scanf("%d%d",&n,&m);

	for(int i=1;i<=m;i++)scanf("%d%d",&u,&v),add(u,v),Ed[u].push_back(v);

	for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i);

	for(int i=1;i<=m;i++)if(refl[ed[i].to]==refl[ed[i].from])ed[i].ans=1;

	for(int x=1;x<=n;x++)

	{

		for(int i=1;i<=n;i++)fir[0][i]=fir[1][i]=0;

		fir[0][x]=fir[1][x]=1,tot=0;

		for(int i=head[x];i;i=ed[i].nxt)E[++tot]=i;

		for(int i=1;i<=tot;i++)if(!fir[0][ed[E[i]].to])dfs(ed[E[i]].to,E[i],0);

		for(int i=tot;i;i--)if(!fir[1][ed[E[i]].to])dfs(ed[E[i]].to,E[i],1);

		for(int i=head[x];i;i=ed[i].nxt)

			if(fir[0][ed[i].to]!=i||fir[1][ed[i].to]!=i)ed[i].ans++;

	}

	for(int i=1;i<=m;i++)

		if(ed[i].ans==1)printf("diff\n");

		else printf("same\n");

	//cerr<<clock();

	return 0;

}

/*

3 3

1 2

2 3

1 3

*/