いくら考えても分からないので、どうかご教授おねがいします。

入力として文字列一つを受け取り、その部分文字列すべてを短い順に出力する
プログラムをC言語を用いて作れ。文字列は引数で与え、プログラムからは
main(int argc, char *argv[])関数の引数argv[1]として利用せよ。
整数変数をmain関数の行数だけ用意して、完成したプログラムのすべての箇所で
実行時の通過回数を数えるカウンタとして使い、計算が終わったあとに最も
通過回数の多かった箇所の回数と、文字列の長さを印字するようにせよ。
例:入力がabcdeだったときの出力は

文字列の長さは5
a
b
c
d
e
ab
bc
cd
de
abc
bcd
cde
abcd
bcde
abcde
(通過回数はわからなかったので省略しました)