#include <stdio.h>

#define MAX_DIGITS 50  // 配列の要素数を定義

// 3の累乗を計算し、配列resultに格納する関数
void power3(unsigned long result[]) {
    result[0] = 1;  // 初期値は3^0 = 1

    for (int i = 1; i <= 99; i++) {
        unsigned long carry = 0;  // 桁上がりを保存する変数
        for (int j = 0; j < MAX_DIGITS; j++) {
            unsigned long temp = result[j] * 3 + carry;
            result[j] = temp % 10000000;  // 7桁ごとに分ける
            carry = temp / 10000000;  // 桁上がり
        }

        // 各ステップの結果を出力
        printf("n= %2d: ", i);
        print_result(result);
    }
}

// 計算結果を表示する関数
void print_result(unsigned long result[]) {
    int started = 0;  // 最初の非ゼロ桁を見つけるためのフラグ
    for (int i = MAX_DIGITS - 1; i >= 0; i--) {
        if (started) {
            printf("%07lu", result[i]);  // 7桁ゼロ埋めで表示
        } else if (result[i] != 0) {
            printf("%lu", result[i]);  // 最初の非ゼロ桁はゼロ埋めしない
            started = 1;
        }
    }
    printf("\n");  // 最後に改行
}

int main() {
    unsigned long result[MAX_DIGITS] = {0};  // 配列を0で初期化
    power3(result);  // 3の累乗を計算

    return 0;
}

