#include <bits/stdc++.h>

using namespace std;

const int N = 1e3 + 10;
const int M = 2e5 + 10;

bool ans[M];
int n, m, tot;
int Min[N][N], Max[N][N];
vector<pair<int, int> > g[N];

void dfs(int *a, int x, int v)
{
	if(!a[x])a[x] = v;
	else return;
	for(int i = 0; i < (int)g[x].size(); i++)
		dfs(a, g[x][i].first, v);
}

int main()
{
	scanf("%d%d", &n, &m);
	for(int i = 1; i <= m; i++)
	{
		int x, y;
		scanf("%d%d", &x, &y);
		g[x].push_back(make_pair(y, ++tot));
	}
	for(int x = 1; x <= n; x++)
	{
		Min[x][x] = Max[x][x] = 1;
		for(int i = 0; i < (int)g[x].size(); i++)
		{
			int y = g[x][i].first;
			dfs(Min[x], y, g[x][i].second);
		}
		for(int i = g[x].size() - 1; ~i; i--)
		{
			int y = g[x][i].first;
			dfs(Max[x], y, g[x][i].second); 
		}
	}
	for(int x = 1; x <= n; x++)
	{
		for(int i = 0; i < (int)g[x].size(); i++)
		{
			int y = g[x][i].first, num = g[x][i].second;
			bool flag1 = Min[y][x] > 0;
			bool flag2 = (Min[x][y] && Min[x][y] != num) || (Max[x][y] && Max[x][y] != num);
			if((flag1 && !flag2) || (!flag1 && flag2))ans[num] = 1;
		}
	}
	for(int i = 1; i <= tot; i++)
		if(ans[i])puts("diff");
		else puts("same");
}