#include<bits/stdc++.h>
using namespace std;
inline int read(){
	register int x=0;
	register char ch=getchar();
	while(ch<'0'||ch>'9')	ch=getchar();
	while(ch>='0'&&ch<='9')	x=x*10+(ch^48),ch=getchar();
	return x;
}
const int N=1e3+5;
const int M=2e5+5;
struct each{
	int x,y;
}a[M];
vector<int>b[N];
int n,m,cnt[N],suf[N][N],pre[N][N],vis[N],vi[N][N];
void dfs(int x){
	int si=b[x].size(); vis[x]=1;
	for(int i=0;i<si;i++)
		if(!vis[b[x][i]])	dfs(b[x][i]);
}
void dfs(int x,int k,int ty){
	int si=b[x].size();	vis[x]=1;
	if(ty){
		for(int i=si-1;~i;i--){
			int v=b[x][i];
			if(!vis[v]) pre[k][v]=x,dfs(v,k,ty);
		}
	}
	else{
		for(int i=0;i<si;i++){
			int v=b[x][i];
			if(!vis[v]) suf[k][v]=x,dfs(v,k,ty);
		}
	}
}
bool check(int x){
	int v=b[x][cnt[x]++];
	if(pre[x][v]==suf[x][v]&&pre[x][v]==x&&suf[x][v]==x)	return false;
	else	return true;
}
int main(){
	n=read(),m=read();
	for(int i=1;i<=m;i++){
		a[i].x=read(),a[i].y=read();
		b[a[i].x].push_back(a[i].y);
	}
	for(int i=1;i<=n;i++){
		dfs(i);
		for(int j=1;j<=n;j++)
			vi[i][j]=vis[j],vis[j]=0;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++)	vis[j]=0;
		dfs(i,i,0);
		for(int j=1;j<=n;j++)	vis[j]=0;
		dfs(i,i,1);
	}
	for(int i=1;i<=m;i++){
		if(vi[a[i].y][a[i].x]^check(a[i].x))	puts("diff");
		else	puts("same");
	}
	return 0;
}
