Cod sursa(job #169361)
#include<cstdio>
#include<cstring>
int n,t,i;
char a[10001];
char b[10001];
int solve(int st,int dr)
{
if(st > dr) return 0;
while(st + 1 < dr)
{
if(b[st] > 19) return 0;
if(b[dr] < 0) b[dr] += 10, b[dr - 1]--;
if(b[st] == b[dr]) st++, dr--;
else if(b[st] == b[dr] + 1) { st++; dr--; b[st] += 10;}
else if(b[st] == b[dr] + 10)
{
st++; dr--;
if (b[dr] == 9 && b[st] == 19) return 0;
if (b[dr > 0]) b[dr]--;
else b[dr] = 9;
}
else if(b[st] == b[dr] + 11) { st++; dr--; b[dr]--; b[st] += 10;}
else return 0;
}
if(b[st] > 19) return 0;
if(st == dr) return b[st] % 2 == 0 && b[st] >= 0 && b[st] < 19;
else
{
if(b[dr] < 0)
{
b[dr] += 10,b[st]--;
if(b[st] == b[dr]) return 1;
else return 0;
}
else
if(b[st] == b[dr]) return 1;
else if(b[st] - 11 == b[dr]) return 1;
else return 0;
}
}
int main()
{
freopen("invers.in","r",stdin);
freopen("invers.out","w",stdout);
scanf("%d ",&t);
while(t--)
{
scanf(" %s ",a);
n = strlen(a);
for(i = 0; i < n; i++) {a[i] -= '0'; b[i] = a[i];}
if(solve(0, n - 1)) goto da;
else if(a[0] == 1)
{
memcpy(b, a, sizeof(a));
b[1] += 10;
if(solve(1, n - 1)) goto da;
else goto nu;
}
else goto nu;
da:
printf("DA\n");
continue;
nu:
printf("NU\n");
}
fclose(stdout);
return 0;
}