#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main() {
    //捷径方法
    // long long N;

    // // 读取输入
    // if (scanf("%lld", &N) != 1) {
    //     printf("输入错误!\n");
    //     return 1;
    // }

    // // 设置地区
    // setlocale(LC_NUMERIC, "");

    // // 分配内存
    // char* shuzu = (char*)malloc(30 * sizeof(char));
    // if (shuzu == NULL) {
    //     printf("内存分配失败!\n");
    //     return 1;
    // }

    // // 格式化并输出
    // sprintf(shuzu, "%'lld", N);
    // printf("%s", shuzu);

    // // 释放内存
    // free(shuzu);
    // return 0;


    //正常方法
    long long N;
    scanf("%lld", &N);

    char *shuzu = (char *)malloc(30 * sizeof(char));

    long long shu = N;
    shuzu[29] = '\0';
    int i = 28;
    int count = 0;
    while (shu) {
        if (count == 3){
            shuzu[i--] = ',';
            count = 0;
        }
        shuzu[i--] = (shu % 10) + '0';
        shu /= 10;
        count++;
    }
    for (int z = i + 1; z < 29; z++){
        printf("%c", shuzu[z]);
    }
}



// 创建字符串指针数组
// char *str_array[size];

// for (int i = 0; i < size; i++) {
//     // 为每个数字分配足够的内存
//     str_array[i] = malloc(20 * sizeof(char));
//     sprintf(str_array[i], "%d", int_array[i]);
// }




// 参数详解
// LC_NUMERIC - 数字类别
// 还有其他类别:

// LC_ALL:所有设置

// LC_CTYPE:字符分类

// LC_TIME:时间格式

// LC_MONETARY:货币格式






// 英语地区(美国)
// c
// setlocale(LC_NUMERIC, "en_US.UTF-8");
// sprintf(str, "%'lld", 1234567890);
// // 输出: "1,234,567,890"(逗号分隔)
// 德语地区
// c
// setlocale(LC_NUMERIC, "de_DE.UTF-8");
// sprintf(str, "%'lld", 1234567890);
// // 可能输出: "1.234.567.890"(点号分隔)
// 法语地区
// c
// setlocale(LC_NUMERIC, "fr_FR.UTF-8");
// sprintf(str, "%'lld", 1234567890);
// // 可能输出: "1 234 567 890"(空格分隔)




// 千位分隔符:%'lld
// 在格式说明符 % 和 lld 之间加上单引号 ',就会启用千位分隔符:

// c
// sprintf(str, "%'lld", 7800000000LL);
// // 输出: "7,800,000,000"