int main(int argc, char *argv[]) { setIO("sample"); n = gi; if(n % 2 == 0){ printf("NOT POSSIBLE\n");closeIO();return 0; } bool unique = true; scanf("%s",a+1); pow[0].v = 1; for(int i = 0;i<=n;++i) pow[i+1] = pow[i]*int65(p); for(int i = 1;i<=n;++i) pre[i] = (pre[i-1]*int65(p)+int65(a[i])); b[0] = pre[n/2]; b[1] = (pre[n]-((pre[n/2+1])*(pow[n/2]))); int ans = 0; if(b[0] ==b[1]){printf("%s",&a[n/2+2]); closeIO();return 0;} for(int i = 1;i<=n/2;++i) if(getnew(1,i-1)*pow[n/2-i+1]+getnew(i+1,n/2+1)==b[1]) ans = ans? (unique = false):i; for(int i = n/2+2;i<=n;++i) if(getnew(n/2+1,i-1)*pow[n-i]+getnew(i+1,n) == b[0]) ans = ans? (unique = false):i; if(unique){ if(ans == 0) printf("NOT POSSIBLE"); else if(ans <= n/2+1) printf("%s",&a[n/2+2]); else for(int i = 1;i<=n/2;++i) printf("%c",a[i]); puts(""); } else printf("NOT UNIQUE\n"); closeIO(); return EXIT_SUCCESS; }
/* inserts an element after a given element (prev_data) prev_data content of the previous element data content of the new element data_size size of data //*/ int insertelement(const char* prev_data, const unsigned int prev_data_size, const char* data, const unsigned int data_size) { // checks if(NULL == data) return -1; // special case: if prev_data is null - prepend the new element if(NULL == prev_data){ element_t* tmp = NULL; if(NULL == (tmp = getnew())){ return -1; } if(0 != init(tmp, data, data_size)){ return -1; } // relink - last is already set correctly tmp->next = first; first = tmp; // if tmp is the only element added, set last, too if(NULL == last){ last = first; } return 0; } // normal case: prev elements // TODO get prev // new element element_t* tmp = find(data, data_size); // TODO: what if no tmp was found // next element element_t* next = prev->next; // TODO, the next // relink elements tmp->next = next; prev->next = tmp; return 0; }