#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int min(int a,int b){
return a<=b?a:b;
}
#define swap(a,b){ char *t=x[a];x[a]=x[b];x[b]=t;}
#define i2c(i) x[i][depth]
void vecswap(int i, int j, int n, char *x[])
{ while (n-- > 0) {
swap(i, j);
i++;
j++;
}
}
void ssort1(char *x[],int n,int depth);
void ssort(char *x[],int n)
{
ssort1(x,n,0);
}
void ssort1(char *x[],int n,int depth){
int a,b,c,d,r,v;
if(n<=1)
return ;
a=rand()%n;
swap(0,a);
v=i2c(0);
a=b=1;
c=d=n-1;
for (;;)
{
while(b<=c && (r=i2c(b)-v)<=0){
if (r==0) { swap(a,b);a++;}
b++;
}
while(b<=c && (r=i2c(c)-v)>=0){
if (r==0) { swap(c,d); d--;}
c--;
}
if (b>c) break;
swap(b,c);
b++;
c--;
}
r=min(a,b-a);vecswap(0,b-r,r,x);
r = min(d-c, n-d-1); vecswap(b, n-r, r, x);
r=b-a;ssort1(x,r,depth);
if (i2c(r)!=0)
ssort1(x+r,a+n-d-1,depth+1);
r=d-c; ssort1(x+n-r,r,depth);
}
int main(){
char *s[]={"dato","giorgi","beso","computer","deda","kata","spilo"};
int n=sizeof(s)/sizeof(char);
ssort(s,n);
for (int i=0;i<n;i++)
cout<<s[i]<<" "<<endl;
return 0;
}
I2luY2x1ZGU8c3RkbGliLmg+CiNpbmNsdWRlPHN0ZGlvLmg+CiNpbmNsdWRlPHN0cmluZy5oPgojaW5jbHVkZTxpb3N0cmVhbT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IG1pbihpbnQgYSxpbnQgYil7CglyZXR1cm4gYTw9Yj9hOmI7Cgp9CiNkZWZpbmUgc3dhcChhLGIpeyBjaGFyICp0PXhbYV07eFthXT14W2JdO3hbYl09dDt9CiNkZWZpbmUgaTJjKGkpICB4W2ldW2RlcHRoXQp2b2lkIHZlY3N3YXAoaW50IGksIGludCBqLCBpbnQgbiwgY2hhciAqeFtdKQp7IHdoaWxlIChuLS0gPiAwKSB7CnN3YXAoaSwgaik7CmkrKzsKaisrOwp9Cn0Kdm9pZCBzc29ydDEoY2hhciAqeFtdLGludCBuLGludCBkZXB0aCk7CnZvaWQgIHNzb3J0KGNoYXIgKnhbXSxpbnQgbikKewoJc3NvcnQxKHgsbiwwKTsKCn0Kdm9pZCBzc29ydDEoY2hhciAqeFtdLGludCBuLGludCBkZXB0aCl7CglpbnQgYSxiLGMsZCxyLHY7CglpZihuPD0xKQoJCXJldHVybiA7CglhPXJhbmQoKSVuOwoJc3dhcCgwLGEpOwoJdj1pMmMoMCk7CglhPWI9MTsKCWM9ZD1uLTE7Cglmb3IgKDs7KQoJewoJCSB3aGlsZShiPD1jICYmIChyPWkyYyhiKS12KTw9MCl7CgkJCSBpZiAocj09MCkgeyBzd2FwKGEsYik7YSsrO30KCgkJCSBiKys7CgkJIH0KCgkJIHdoaWxlKGI8PWMgJiYgKHI9aTJjKGMpLXYpPj0wKXsKCQkJIGlmIChyPT0wKSB7IHN3YXAoYyxkKTsgZC0tO30KCQkJIGMtLTsKCgkJIH0KCgkJIGlmIChiPmMpICBicmVhazsKCQkgc3dhcChiLGMpOwoJCSBiKys7CgkJIGMtLTsKCQkgCX0Kcj1taW4oYSxiLWEpO3ZlY3N3YXAoMCxiLXIscix4KTsKciA9IG1pbihkLWMsIG4tZC0xKTsgdmVjc3dhcChiLCBuLXIsIHIsIHgpOwpyPWItYTtzc29ydDEoeCxyLGRlcHRoKTsKaWYgKGkyYyhyKSE9MCkKCXNzb3J0MSh4K3IsYStuLWQtMSxkZXB0aCsxKTsKcj1kLWM7IHNzb3J0MSh4K24tcixyLGRlcHRoKTsKCgoKfQoKaW50IG1haW4oKXsKCWNoYXIgKnNbXT17ImRhdG8iLCJnaW9yZ2kiLCJiZXNvIiwiY29tcHV0ZXIiLCJkZWRhIiwia2F0YSIsInNwaWxvIn07CglpbnQgbj1zaXplb2Yocykvc2l6ZW9mKGNoYXIpOwoKCXNzb3J0KHMsbik7Cglmb3IgKGludCBpPTA7aTxuO2krKykKCQljb3V0PDxzW2ldPDwiICAiPDxlbmRsOwoKCgoKCXJldHVybiAwOwp9