#include<bits/stdc++.h>
using namespace std;
long long n,k,ans=-1,x,y;
long long a[100005],b[100005];
map<int,int> m;
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
b[i]=b[i-1]+a[i]%k;
b[i]%=k;
}
for(int i=1;i<=n;i++){
if(m[b[i]]==0) m[b[i]]=i;
else{
if(ans<=i-m[b[i]]){
ans=i-m[b[i]];
x=m[b[i]]+1;
y=i;
}
}
}
cout<<ans<<endl;
if(ans!=-1){
for(int i=x;i<=y;i++) cout<<a[i]<<" ";
}
}
大致思路就是前缀合数组中每位都对k取模,那如果数组中有两个相同的就分别是合法子段第一个的前一个和子段的最后一个