#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define BUFSIZE 2048
struct _Range{
int min;
int max;
struct _Range *next;
};
typedef struct _Range Range;
Range *new(void){
Range
*ptr
= (Range
*)malloc(sizeof(Range
)); if(ptr == NULL){
}
return(ptr);
}
void del(Range *head){
Range *cur, *tmp;
cur = head;
while(cur){
tmp = cur->next;
cur = tmp;
}
}
void print(Range *r){
if(r != NULL){
printf("[%d,%d]", r
->min
, r
->max
); while((r = r->next) != NULL){
printf(",[%d,%d]", r
->min
, r
->max
); }
}
}
int is_within(Range *a, Range *b){
if(a == NULL || b == NULL){
return(0);
}else{
int ret = 0;
ret |= (a->min-1 <= b->min) & (b->min <= a->max+1);
ret |= (a->min-1 <= b->max) & (b->max <= a->max+1);
ret |= (b->min-1 <= a->min) & (a->min <= b->max+1);
ret |= (b->min-1 <= a->max) & (a->max <= b->max+1);
return(ret);
}
}
int min(int a, int b){
return(a < b ? a : b);
}
int max(int a, int b){
return(a > b ? a : b);
}
Range *regist(Range *head, int mn, int mx){
Range *tmp = new();
*tmp = (Range){mn, mx, NULL};
if(head == NULL){
head = tmp;
return(head);
}
Range *cur, *prev;
cur = prev = head;
if((tmp->min) < (cur->min)){
head = tmp;
head->next = cur;
cur = prev = head;
}else{
cur = cur->next;
while(cur != NULL){
if((tmp->min) < (cur->min)){
prev->next = tmp;
tmp->next = cur;
break;
}
prev = prev->next;
cur = cur->next;
}
if(cur == NULL){
prev->next = tmp;
}
}
cur = prev->next;
while(cur != NULL){
if(is_within(prev, cur)){
prev->min = min(prev->min, cur->min);
prev->max = max(prev->max, cur->max);
prev->next = cur->next;
cur = prev->next;
continue;
}
prev = prev->next;
cur = cur->next;
}
return(head);
}
void del_space(char *s){
int i,j;
j = 0;
for(i = 0; i < BUFSIZE; i++){
s[j] = s[i];
j++;
}
}
}
void odai(const char *s){
Range *r = NULL;
int mn, mx;
char *p, *ep;
int flg_err = 1;
p = (char *)s;
while(1){
if(*p != '[')
break;
p++;
if(p == ep || *ep != ',')
break;
p = ep+1;
if(p == ep || *ep != ']')
break;
p = ep+1;
r = regist(r,mn,mx);
if(*p == '\0'){
flg_err = 0;
break;
}else if(*p != ',')
break;
p++;
}
if(flg_err){
del(r);
return;
}
print(r);
del(r);
}
int main(void){
char buf[BUFSIZE];
while(fgets((char *)memset(buf
, 0, BUFSIZE
), BUFSIZE
, stdin
)){ del_space(buf);
odai(buf);
}
return(0);
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8Y3R5cGUuaD4KI2RlZmluZSBCVUZTSVpFIDIwNDgKc3RydWN0IF9SYW5nZXsKICAgIGludCBtaW47CiAgICBpbnQgbWF4OwogICAgc3RydWN0IF9SYW5nZSAqbmV4dDsKfTsKdHlwZWRlZiBzdHJ1Y3QgX1JhbmdlIFJhbmdlOwpSYW5nZSAqbmV3KHZvaWQpewogICAgUmFuZ2UgKnB0ciA9IChSYW5nZSAqKW1hbGxvYyhzaXplb2YoUmFuZ2UpKTsKICAgIGlmKHB0ciA9PSBOVUxMKXsKICAgICAgICBwZXJyb3IoIm1hbGxvYyIpOwogICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKICAgIH0KICAgIHJldHVybihwdHIpOwp9CnZvaWQgZGVsKFJhbmdlICpoZWFkKXsKICAgIFJhbmdlICpjdXIsICp0bXA7CiAgICBjdXIgPSBoZWFkOwogICAgd2hpbGUoY3VyKXsKICAgICAgICB0bXAgPSBjdXItPm5leHQ7CiAgICAgICAgZnJlZShjdXIpOwogICAgICAgIGN1ciA9IHRtcDsKICAgIH0KfQp2b2lkIHByaW50KFJhbmdlICpyKXsKICAgIGlmKHIgIT0gTlVMTCl7CiAgICAgICAgcHJpbnRmKCJbJWQsJWRdIiwgci0+bWluLCByLT5tYXgpOwogICAgICAgIHdoaWxlKChyID0gci0+bmV4dCkgIT0gTlVMTCl7CiAgICAgICAgICAgIHByaW50ZigiLFslZCwlZF0iLCByLT5taW4sIHItPm1heCk7CiAgICAgICAgfQogICAgICAgIHB1dHMoIiIpOwogICAgfQp9CmludCBpc193aXRoaW4oUmFuZ2UgKmEsIFJhbmdlICpiKXsKICAgIGlmKGEgPT0gTlVMTCB8fCBiID09IE5VTEwpewogICAgICAgIHJldHVybigwKTsKICAgIH1lbHNlewogICAgICAgIGludCByZXQgPSAwOwogICAgICAgIHJldCB8PSAoYS0+bWluLTEgPD0gYi0+bWluKSAmIChiLT5taW4gPD0gYS0+bWF4KzEpOwogICAgICAgIHJldCB8PSAoYS0+bWluLTEgPD0gYi0+bWF4KSAmIChiLT5tYXggPD0gYS0+bWF4KzEpOwogICAgICAgIHJldCB8PSAoYi0+bWluLTEgPD0gYS0+bWluKSAmIChhLT5taW4gPD0gYi0+bWF4KzEpOwogICAgICAgIHJldCB8PSAoYi0+bWluLTEgPD0gYS0+bWF4KSAmIChhLT5tYXggPD0gYi0+bWF4KzEpOwogICAgICAgIHJldHVybihyZXQpOwogICAgfQp9CmludCBtaW4oaW50IGEsIGludCBiKXsKICAgIHJldHVybihhIDwgYiA/IGEgOiBiKTsKfQppbnQgbWF4KGludCBhLCBpbnQgYil7CiAgICByZXR1cm4oYSA+IGIgPyBhIDogYik7Cn0KUmFuZ2UgKnJlZ2lzdChSYW5nZSAqaGVhZCwgaW50IG1uLCBpbnQgbXgpewogICAgUmFuZ2UgKnRtcCA9IG5ldygpOwogICAgKnRtcCA9IChSYW5nZSl7bW4sIG14LCBOVUxMfTsKICAgIGlmKGhlYWQgPT0gTlVMTCl7CiAgICAgICAgaGVhZCA9IHRtcDsKICAgICAgICByZXR1cm4oaGVhZCk7CiAgICB9ICAgIAogICAgUmFuZ2UgKmN1ciwgKnByZXY7CiAgICBjdXIgPSBwcmV2ID0gaGVhZDsKICAgIGlmKCh0bXAtPm1pbikgPCAoY3VyLT5taW4pKXsKICAgICAgICBoZWFkID0gdG1wOwogICAgICAgIGhlYWQtPm5leHQgPSBjdXI7CiAgICAgICAgY3VyID0gcHJldiA9IGhlYWQ7CiAgICB9ZWxzZXsKICAgICAgICBjdXIgPSBjdXItPm5leHQ7CiAgICAgICAgd2hpbGUoY3VyICE9IE5VTEwpewogICAgICAgICAgICBpZigodG1wLT5taW4pIDwgKGN1ci0+bWluKSl7CiAgICAgICAgICAgICAgICBwcmV2LT5uZXh0ID0gdG1wOwogICAgICAgICAgICAgICAgdG1wLT5uZXh0ID0gY3VyOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcHJldiA9IHByZXYtPm5leHQ7CiAgICAgICAgICAgIGN1ciA9IGN1ci0+bmV4dDsKICAgICAgICB9CiAgICAgICAgaWYoY3VyID09IE5VTEwpewogICAgICAgICAgICBwcmV2LT5uZXh0ID0gdG1wOwogICAgICAgIH0KICAgIH0KICAgIGN1ciA9IHByZXYtPm5leHQ7CiAgICB3aGlsZShjdXIgIT0gTlVMTCl7CiAgICAgICAgaWYoaXNfd2l0aGluKHByZXYsIGN1cikpewogICAgICAgICAgICBwcmV2LT5taW4gPSBtaW4ocHJldi0+bWluLCBjdXItPm1pbik7CiAgICAgICAgICAgIHByZXYtPm1heCA9IG1heChwcmV2LT5tYXgsIGN1ci0+bWF4KTsKICAgICAgICAgICAgcHJldi0+bmV4dCA9IGN1ci0+bmV4dDsKICAgICAgICAgICAgZnJlZShjdXIpOwogICAgICAgICAgICBjdXIgPSBwcmV2LT5uZXh0OwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgcHJldiA9IHByZXYtPm5leHQ7CiAgICAgICAgY3VyID0gY3VyLT5uZXh0OwogICAgfQogICAgcmV0dXJuKGhlYWQpOwp9CnZvaWQgZGVsX3NwYWNlKGNoYXIgKnMpewogICAgaW50IGksajsKICAgIGogPSAwOwogICAgZm9yKGkgPSAwOyBpIDwgQlVGU0laRTsgaSsrKXsKICAgICAgICBpZihpc2dyYXBoKHNbaV0pKXsKICAgICAgICAgICAgc1tqXSA9IHNbaV07CiAgICAgICAgICAgIGorKzsKICAgICAgICB9CiAgICB9CiAgICBtZW1zZXQocytqLCAwLCBCVUZTSVpFLWopOwp9CnZvaWQgb2RhaShjb25zdCBjaGFyICpzKXsKICAgIFJhbmdlICpyID0gTlVMTDsKICAgIGludCBtbiwgbXg7CiAgICBjaGFyICpwLCAqZXA7CiAgICBpbnQgZmxnX2VyciA9IDE7CiAgICBwID0gKGNoYXIgKilzOwogICAgd2hpbGUoMSl7CiAgICAgICAgaWYoKnAgIT0gJ1snKQogICAgICAgICAgICBicmVhazsKICAgICAgICBwKys7CiAgICAgICAgbW4gPSBzdHJ0b2wocCwgJmVwLCAxMCk7CiAgICAgICAgaWYocCA9PSBlcCB8fCAqZXAgIT0gJywnKQogICAgICAgICAgICBicmVhazsKICAgICAgICBwID0gZXArMTsKICAgICAgICBteCA9IHN0cnRvbChwLCAmZXAsIDEwKTsKICAgICAgICBpZihwID09IGVwIHx8ICplcCAhPSAnXScpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIHAgPSBlcCsxOwogICAgICAgIHIgPSByZWdpc3QocixtbixteCk7CiAgICAgICAgaWYoKnAgPT0gJ1wwJyl7CiAgICAgICAgICAgIGZsZ19lcnIgPSAwOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9ZWxzZSBpZigqcCAhPSAnLCcpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIHArKzsKICAgIH0KICAgIGlmKGZsZ19lcnIpewogICAgICAgIHB1dHMoIklucHV0IGVycm9yLiIpOwogICAgICAgIGRlbChyKTsKICAgICAgICByZXR1cm47CiAgICB9ICAgICAgICAKICAgIHByaW50KHIpOwogICAgZGVsKHIpOwp9CmludCBtYWluKHZvaWQpewogICAgY2hhciBidWZbQlVGU0laRV07CiAgICB3aGlsZShmZ2V0cygoY2hhciAqKW1lbXNldChidWYsIDAsIEJVRlNJWkUpLCBCVUZTSVpFLCBzdGRpbikpewogICAgICAgIGRlbF9zcGFjZShidWYpOwogICAgICAgIG9kYWkoYnVmKTsKICAgIH0gICAKICAgIHJldHVybigwKTsKfQ==