#include<stdio.h>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
using namespace std;
typedef pair<int,int> pii;
typedef long long int lld;
const int MAX=1020;
const int MOD=1000000007;
vector<int> adj[MAX],adj_s[MAX],radj[MAX],radj_s[MAX],group[MAX],g_adj[MAX];
vector<pii> cnd;
stack<int> scc_chk,fin_chk,temp;
int n,m,id[MAX],chk[MAX],id_len,pos[MAX][MAX],tab[MAX][MAX],src=-1,dst=-1;
int g_tab[MAX][MAX],g_pos[MAX][MAX],g_in[MAX],g_out[MAX],g_cnt[MAX][MAX],fin[MAX*200];
void scc1(int x){
    if(chk[x]) return;
    chk[x]=1;
    for(int i=0;i<adj[x].size();i++) scc1(adj[x][i]);
    scc_chk.push(x);
}
void scc2(int x,int y){
    if(!chk[x]) return;
    chk[x]=0,id[x]=y,group[y].push_back(x);
    for(int i=0;i<radj[x].size();i++) scc2(radj[x][i],y);
}
void cntdp(int x){
    if(g_cnt[x][0]) return;
    g_cnt[x][0]=1,g_cnt[x][x]=1;
    for(int i=0;i<g_adj[x].size();i++){
        cntdp(g_adj[x][i]);
        for(int j=1;j<=id_len;j++) g_cnt[x][j]+=g_cnt[g_adj[x][i]][j],g_cnt[x][j]%=MOD;
    }
}
void dfs(int x){
    if(chk[x]) return;
    chk[x]=1;
    for(int i=0;i<adj_s[x].size();i++) {
        if(!chk[adj_s[x][i]]) dfs(adj_s[x][i]),cnd.push_back(make_pair(x,adj_s[x][i]));
    }
}
void rdfs(int x){
    if(!chk[x]) return;
    chk[x]=0;
    for(int i=0;i<radj_s[x].size();i++) {
        if(chk[radj_s[x][i]]) rdfs(radj_s[x][i]),cnd.push_back(make_pair(radj_s[x][i],x));
    }
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++){
        int t1,t2;
        scanf("%d%d",&t1,&t2);
        adj[t1].push_back(t2);
        radj[t2].push_back(t1);
        tab[t1][t2]=i;
    }
    for(int i=1;i<=n;i++) scc1(i);
    while(!scc_chk.empty()){
        int t=scc_chk.top();
        scc_chk.pop();
        if(chk[t]) scc2(t,id_len++);
    }
    for(int i=1;i<=n;i++) for(int j=0;j<adj[i].size();j++){
        if(id[i]!=id[adj[i][j]]) {
            if(!g_tab[id[i]][id[adj[i][j]]]) g_adj[id[i]].push_back(id[adj[i][j]]);
            g_tab[id[i]][id[adj[i][j]]]++;
        }
        else{
            adj_s[i].push_back(adj[i][j]);
            radj_s[adj[i][j]].push_back(i);
        }
    }
    for(int i=0;i<id_len;i++){
        g_out[i]=g_adj[i].size();
        for(int j=0;j<g_adj[i].size();j++)  g_in[g_adj[i][j]]++;//printf("%d:%d ",g_adj[i][j],g_tab[i][g_adj[i][j]]);
        //printf("\n");
    }
    for(int i=0;i<id_len;i++) cntdp(i);
    for(int i=0;i<id_len;i++) for(int j=0;j<id_len;j++) if(i!=j&&g_tab[i][j]==1) if(g_cnt[i][j]==1) g_pos[i][j]=1;//printf("%d %d\n",i,j);
    for(int i=0;i<id_len;i++) dfs(group[i][0]),rdfs(group[i][0]);
    for(int i=0;i<cnd.size();i++){
        fin_chk.push(cnd[i].first);
        while(!fin_chk.empty()){
            int t=fin_chk.top();
            fin_chk.pop();
            if(chk[t]==0){
                temp.push(t);
                chk[t]=1;
                for(int j=0;j<adj_s[t].size();j++){
                    if(cnd[i].first!=t||cnd[i].second!=adj_s[t][j]) fin_chk.push(adj_s[t][j]);
                }
            }
        }
        if(temp.size()!=group[id[cnd[i].first]].size()) pos[cnd[i].first][cnd[i].second]=1;
        //printf("%d %d %d %d\n",cnd[i].first,cnd[i].second,temp.size(),group[id[cnd[i].first]].size());
        while(!temp.empty()){
            chk[temp.top()]=0;
            temp.pop();
        }
    }
    for(int i=1;i<=n;i++) for(int j=1;j<=n;j++){
        if(tab[i][j]>0){
            if(id[i]==id[j]) fin[tab[i][j]]=!pos[i][j];
            else fin[tab[i][j]]=g_pos[id[i]][id[j]];
        }
    }
    for(int i=1;i<=m;i++){
        if(fin[i]) printf("same\n");
        else printf("diff\n");
    }
}



Measured memory_bytes: 27328