ポインタと2次元配列

以下のプログラムは、配列aのデータを配列bにコピーし、内容を表示するものです。
ただし、データの移動は、全てポインタをもちいるものとする。

このとき、空欄1から5を埋めてプログラムを完成させなさい。

ただし、

[空欄1]では配列a
[空欄2]では配列b
[空欄3]ではポインタ変数pa, pb, int型変数 i, j
[空欄4]ではポインタ変数pa, int型変数 i, j
[空欄5]ではポインタ変数pb

と(必要ならば演算子)のみ使用すること。

注意:
ポインタに先頭アドレスを代入する際、その書式が、(1次元)配列と2次元配列とで違っていることに注意。

#include <stdio.h>

main(){

  int a[3][2] = {{1, 3},{3, -9},{2, 0}};
  int b[3][2];
  int *pa, *pb, i, j;

  pa = [空欄1]; /* 配列aの先頭アドレスをpaに格納 */ 
  pb = [空欄2]; /* 配列bの先頭アドレスをpbに格納 */

/* a から bへのポインタ変数だけを用いたコピー */ 
  for(i=0; i<3; i++){
    for(j=0; j<2; j++){
      [空欄3]
    }
  }

/* b[][]のデータを表示 */
  printf("matrix A\n");
  for(i=0; i<3; i++){
    for(j=0; j<2; j++){
       printf("a[%d][%d]=%d", i, j, [空欄4]);
    }
  printf("\n");
  }

/* b[][]のデータを表示 */
  printf("matrix B\n");
  for(i=0; i<3; i++){
    for(j=0; j<2; j++){
       printf("b[%d][%d]=%d", i, j, *pb);
     [空欄5 (pb に関する演算)]
    }
  printf("\n");
  }
}

実行結果

matrix A
a[0][0]=1 a[0][1]=3
a[1][0]=3 a[1][1]=-9
a[2][0]=2 a[2][1]=0
matrix B
b[0][0]=1 b[0][1]=3
b[1][0]=3 b[1][1]=-9
b[2][0]=2 b[2][1]=0