/*
一个有向图, 对每一条边查询反向后强连通块的数目是否改变
*/
#include<bits/stdc++.h>
using namespace std;

const int N=3003;
const int M=2e5+5;

int n,m,v[M],u[M],F[N][N][3];

bool vis[N];

struct node{
	int id,v;
};

vector<node>Link[N];

void dfs(int x,int fa,int Id,int sta){
	vis[x]=1;F[fa][x][sta]=Id;
	int Len=Link[x].size();
	for(int i=0;i<Len;i++)
		if(!vis[Link[x][i].v])
			dfs(Link[x][i].v,fa,Id,sta);
}

void sol(int x){
	int Len=Link[x].size();
	memset(vis,0,sizeof(vis));
	vis[x]=1;
	for(int i=0;i<Len;i++)
		if(!vis[Link[x][i].v])
			dfs(Link[x][i].v,x,Link[x][i].id,0);
	reverse(Link[x].begin(),Link[x].end());
	memset(vis,0,sizeof(vis));
	vis[x]=1;
	for(int i=0;i<Len;i++)
		if(!vis[Link[x][i].v])
			dfs(Link[x][i].v,x,Link[x][i].id,1);
}

int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++){
		scanf("%d%d",&u[i],&v[i]);
		Link[u[i]].push_back((node){i,v[i]});
	}
	for(int i=1;i<=n;i++) sol(i);
	for(int i=1;i<=m;i++){
		if((F[v[i]][u[i]][0]>0)^(F[u[i]][v[i]][0]!=i||F[u[i]][v[i]][1]!=i))
			printf("diff\n");
		else 
			printf("same\n");
	}
	return 0;
}