#include<bits/stdc++.h>
#define eb emplace_back
#define x first
#define y second
using namespace std;
//读入多行数据
while(n--){
getline(cin, str); ////getline(cin,s) 会读取换行符,并且扔掉
cout << str << endl;
}
map<vector<int>,int>> or map<pair<int,int>,int>>是被允许的
unordered_map却不支持以上操作
set和unordered_set也和上述map一样
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
typedef pair<double,int> PDL;
const int INF=0x3f3f3f3f;
ll gcd(ll a,ll b){ //最大公约数
return b==0?a:gcd(b,a%b);
}
ll pow(ll m,ll n,ll mod){ //阶乘 m的n次方
ll sum=1%mod;
while(n){
if(n&1)sum=sum*m%mod;
m=m*m%mod;
n>>=1;
}
return sum;
}
ll isprime(ll n){ //判断素数
if(n<2)return n;
for(int i=2;i*i<=n;i++)
if(n%i==0)
return i;
return n;
}
ll phi(ll n){ //1∼N 中与 N 互质的数的个数被称为欧拉函数
ll res=n;
for(int i=2;i<=n/i;i++)
if(n%i==0){
while(n%i==0)n/=i;
res=res/i*(i-1);
}
if(n>1)res=res/n*(n-1);
return res;
}
/* 组合数A和C
ll loginv(ll n,ll mod){
if(n>=mod)n%=mod;
if(n<=1)return n;
return (mod-mod/n)*loginv(mod%n,mod)%mod;
}
ll A(ll n,ll m,ll mod){
if(n<0)return 0;
if(n>m)return A(m,m,mod);
ll res=1;
for(int i=0;i<n;i++)
res=res*(m-i)%mod;
return res;
}
ll C(ll n,ll m,ll mod){
if(n>m)return 0;
if(n<mod&&m<mod)
return A(n,m,mod)*loginv(A(n,n,mod),mod)%mod;
else return C(n/mod,m/mod,mod)*C(n%mod,m%mod,mod)%mod;
}
*/
//从n个数中可以取多少种>=2的组合 (eg:123 - 12 13 123 1234 - 12 13 14 123 124 134 1234
ll count(ll n){
return 1ll<<n-1;
}
//二维前缀和
void qian(vector<vector<int>>& grid) {
int n = grid.size(), m = grid[0].size();
sum.resize(n + 1, vector<int>(m + 1));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) { // grid 的二维前缀和
sum[i + 1][j + 1] = sum[i + 1][j] + sum[i][j + 1] - sum[i][j] + grid[i][j];
}
}
}
//左上方坐标(row1,col1) 右下方坐标(row2,col2) 范围内的总和
int sumall(int row1, int col1, int row2, int col2) {
return sum[row2+1][col2+1]-sum[row1][col2+1]-sum[row2+1][col1]+sum[row1][col1];
}
//二维差分
void insert(int x1,int y1,int x2,int y2,int c)
{
b[x1][y1]+=c;
b[x2+1][y1]-=c;
b[x1][y2+1]-=c;
b[x2+1][y2+1]+=c;
}
for(int i=0;i<n;i++) //在b数组的基础上,还原计数数组,而不是前缀和数组
for(int j=0;j<m;j++)
b[i+1][j+1]+=b[i][j+1]+b[i+1][j]-b[i][j];
//相当于在一个空数组的基础上利用diff差分数组还原处理后的数组,这里要的并不是前缀和数组
vector<vector<int>> cnt(m + 1, vector<int>(n + 1));
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
cnt[i + 1][j + 1] = cnt[i + 1][j] + cnt[i][j + 1] - cnt[i][j] + diff[i][j];
void jin(int x,int d){ //进制转化 x-十进制数 d-要转化的进制
int i=0;
while(x!=0){
a[i++]=x%d;
x/=d;
}
for(i--;i>=0;i--){ //打印出来 从左到右是高位到低位
cout<<a[i];
}
cout<<endl;
}
for(int num=0; num<(1<<n); num++){ //二进制枚举-枚举每一个状态 [0,2的n次方-1]
for(int j=0; j<n; j++){ //枚举该状态下二进制的每一位数值
if(num&(1<<j))//当前状态的第i位 是否为1存在
printf(" %d ",a[j]);
}
}
int最大值为2的32次方减1
for (int num : nums) {
for (int i = 31; i >= 0; i--) {
bit[i] += (num>>i & 1);
}
}
//A 65 a 97 a=A+32 只对需要转换的字符起作用,其他字符不变
void upper(string& str){ //转大写
transform(str.begin(),str.end(),str.begin(),::toupper);
}
void lower(string& str){ //转小写
transform(str.begin(),str.end(),str.begin(),::tolower);
}
//等差数列求合
long long allsum(long long a1,long long an,long long n)
{
if(n%2==0)
return (a1+an)*(n/2);
else return ((a1+an)/2)*n;
}
//等差数列第n项
long long an(long long a1,long long d,long long n)
{
return a1+(n-1)*d;
}
vector<string> cut(string& str){ //分割字符串
str+=" "; //确保所有字符串都能被存进去
vector<string>res;
string s="";
for(auto& i:str){
if(i==' '){
if(s!="")
res.emplace_back(s);
s="";
}
else
s+=i;
}
return res;
}
char c;
isalpha(c) /判断字符是否为字母 "A – Z" 或者 "a – z" 之间,是字母则返回非0整数,不是字符则返回0
isdigit(c) //判断字符是否为数字 "0 - 9"
isalnum(c) //判断字符是否为字母或者数字
islower(c) //判断字符是否为小写字母
isupper(c) //判断字符是否为大写字母
__builtin_popcount(n) //主要作用是计算一个数字的二进制中有多少个1,返回值就是其中1的个数