#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-12;
const int INF = 1 << 30;
const long long LINF = 1ll << 61;
const int BUFFER_SZ = 1 << 20;
const int MOD = 1000 * 1000 * 1000 + 7;
char BUFFER[BUFFER_SZ];
int gi() {
  int x;
  scanf("%d", &x);
  return x;
}
double gd() {
  double x;
  scanf("%lf", &x);
  return x;
}
long long gll() {
  long long x;
  scanf("%lld", &x);
  return x;
}
vector<int> gvi(int n) {
  vector<int> a;
  while (n-- > 0) a.push_back(gi());
  return a;
}
string gs() {
  scanf("%s", BUFFER);
  return string(BUFFER);
}
template <class T>
void print(vector<T> &x, string format) {
  format += "%c";
  for (int i = 0; i < x.size(); ++i)
    printf(format.c_str(), x[i], i + 1 == x.size() ? '\n' : ' ');
}
void solve() {
  string s = gs();
  vector<string> parts;
  string k = "";
  for (int i = 0; i < s.size(); ++i) {
    if (s[i] == '@') {
      parts.push_back(k);
      k = "";
    } else {
      k += s[i];
    }
  }
  parts.push_back(k);
  if (parts.size() == 1 || parts[0].size() == 0 ||
      parts[parts.size() - 1].size() == 0) {
    printf("No solution\n");
    return;
  }
  string res = "";
  for (int i = 1; i < parts.size(); ++i) {
    if (parts[i - 1].size() == 0 || parts[i].size() == 0) {
      printf("No solution\n");
      return;
    }
    string s = parts[i - 1] + "@" +
               ((i == parts.size() - 1) ? parts[i] : parts[i].substr(0, 1));
    parts[i] = parts[i].substr(1);
    if (res.size()) res += ",";
    res += s;
  }
  printf("%s\n", res.c_str());
}
int main() {
  solve();
  return 0;
}
