#include #include #include #include #include #include #include #include #include using namespace std; typedef long long int ll; typedef long double ld; #define rep(i,n) for(int i = 0; i < (n); ++i) #define Sort(Array) sort(Array.begin(), Array.end()) #define Reverse(a) reverse(a.begin(), a.end()) #define out(ans) cout << ans << endl; const int MOD = 1000000007; const int INF = 2147483647; //------------↓------------- M -------------- E ---------------- M --------------- O ---------------↓--------------// // コンパイル // g++ -std=c++1z // // -------型変換-------- // int を string に変換 // string s = to_string(n); // string を int に変換 // int n = stoi(s); // // -------二分探索--------- // k以上の値が最初に現れる時のイテレータ // lower_bound(data.begin(), data.end(), k) // kより大きい値が最初の現れる時のイテレータ O(logN) // upper_bound(data.begin(), data.end(), k) // kがdataに存在するかをtrue or falseで返す O(logN) // binary_search(data.begin(), data.end(), k) // // // // // // // //------------↑------------- M -------------- E ---------------- M --------------- O ---------------↑--------------// int main() { int n, m; cin >> n >> m; char op; cin >> op; int a[n], b[m]; rep(i,m) cin >> b[i]; rep(i,n) cin >> a[i]; if (op == '+') { rep(i,n) { rep(j,m) cout << a[i] + b[j] << " "; cout << endl; } } else { rep(i,n) { rep(j,m) cout << a[i] * b[j] << " "; cout << endl; } } return 0; }